Gostaria de saber se existe uma maneira simples de operar em determinadas linhas com números de linhas pré-atribuídos.
Digamos que eu queira produzir as 1ª, 7ª, 14ª e 16ª linhas de um arquivo, posso simplesmente fazer
sed -n '1p;7p;14p;16p' input_file
mas isso fica mais complicado quando a operação não está apenas imprimindo e eu não quero escrever o mesmo comando longo 4 vezes (e sim, eu sei que posso construir esse comando sed longo substituindo a mesma variável bash 4 vezes, mas isso não é ideal o suficiente ...), ou seja
sed -n '1{long_command};7{long_command};14{long_command};16{long_command}' input_file
Existe uma maneira de fazer a operação nessas linhas específicas do meu arquivo? Eu estou esperando algo como,
sed -n '1,7,14,16p'
o que certamente não funcionará na forma atual.
Qualquer ajuda será apreciada. "Não, não é possível." com explicações também é uma resposta que vou aceitar.
awk
Respostas:
Você pode usar ramos:
(observe que você também pode adicionar alguns
20,25b1
intervalos/re/b1
de linhas ou incluir linhas que correspondam aore
).Ou você pode usar
awk
:Ou usando um hash:
(ou
BEGIN{lines[1]lines[7]lines[14]lines[16]}
se não houver muitos)fonte
Simplesmente inverta sua seleção e exclua-a:
fonte
Primeira variante:
Você pode usar este truque:
Teste
Resultado
Segunda variante:
No início, o auxiliar
sed
é usado para filtrar apenas as linhas necessárias do arquivo, depois essas linhas são direcionadas para a principalsed
com o comando long.fonte