Arquivo:
Data inserted into table. Total count 13
No error occurred
Data inserted into table. Total count 45
No error occurred
Data inserted into table. Total count 14
No error occurred
Data inserted into table. Total count 90
No error occurred
Arquivo de saída esperado:
Data inserted into table. Total count 13
Data inserted into table. Total count 45
Data inserted into table. Total count 14
Data inserted into table. Total count 90
Eu quero que a saída fique assim: cada segunda linha será excluída, mas não haverá espaço entre as linhas.
text-processing
sed
awk
pmaipmui
fonte
fonte
grep -v "No error occurred" file
este comando deve funcionar ... o que @paul respondeu. No arquivo de saída, não haverá linhas contendo "Nenhum erro ocorreu" nesta parte.Respostas:
Com
sed
:Com o POSIX
awk
:Se você tem mais idade
awk
(comooawk
), precisa:Com
ex
:irá editar o arquivo no local.
g
marcar um comando global/$/
combinar todas as linhas+d
exclua a próxima linhawq!
salve todas as alteraçõesEssa abordagem compartilha o mesmo ideal com a
sed
abordagem, exclua todas as próximas linhas da linha atual, começando da linha 1.Com
perl
:e
perl6
:fonte
n\;d
vez de'n;d'
salvar um caractere precioso, mas essa lógica desaparece quando você desnecessariamente usa o-e
comutador e o redirecionamento de arquivo<
!sed -e 'n;d'
, salvar um personagem.n
comando escreve o espaço do padrão na saída padrão, se-n
foi usado, depois substitui o espaço do padrão pela próxima linha. Aqui todas as linhas ímpares serão impressasn
, as linhas pares serão lidas no espaço do padrão, masd
serão excluídas imediatamente pelo comando `.Resolver isso excluindo cada segunda linha pode estar sujeito a erros (por exemplo, quando o processo às vezes gera duas linhas significativas em vez de uma). Talvez seja melhor filtrar o lixo:
Pode ser executado como filtro, você pode adicionar mais padrões de lixo aqui e melhorar o resultado.
fonte
Em resposta à pergunta, com o GNU
sed
:excluirá cada segunda linha, mas eu gostaria de oferecer linhas de filtro por este conteúdo:
ou com o mesmo resultado
fonte
grep Data
egrep -v 'No error'
Aqui está uma maneira de usar
sed
:Outra maneira com o GNU
sed
:Saída dos comandos acima:
fonte
shortest way using sed
?g
comando?sed -n 'p;n'
basta.g
. g removido do comando. :)Você pode tentar com
awk
:ou você pode imprimir apenas linhas contendo
Data inserted
:fonte
Outra resposta, você pode usar o vi / vim!
E se o seu arquivo tiver 500 linhas (por exemplo), digite
E então para escrever e sair do tipo
Ou se algo der errado e você não quiser salvar:
Explicação:
fonte
Aqui está uma maneira bem diferente de fazer isso:
Isso pressupõe que as linhas com números ímpares não contenham tabulações. Se o fizerem, será necessário escolher outro caractere separador, por exemplo,
:
aqui:fonte
sed
com um arquivo enorme (por exemplo, 20 mil linhas). De qualquer forma, +1 mas realmente, a dores de cabeça evitar, escolher um delimitador que é pouco provável de ocorrer em um arquivo de texto, como$'\002'
...seq 100000000 > 100mil.txt
. Apaste|cut
solução terminou em cerca de 7,5 segundos, contra quase 12 nased
solução. Parece ser repetível.grep
é mais rápido. Ubuntu 14.04 com ferramentas GNU padrão.paste
+cut
são altamente otimizado para o seu trabalho tão sem surpresa a sua combinação é muito muito rápido ...Outra opção (mais curta)
fonte
sed n\;d
, adicionar-e
é apenas meu hábito.Também resolve o problema, embora seja um pouco mais lento:
fonte