Script Bash para ler o arquivo e ecoar linhas diferentes para os arquivos de saída [duplicado]

1

Eu tenho um arquivo log.txt com várias linhas de strings e informações.

Eu quero escrever um script para ler o arquivo log.txt linha por linha e qualquer linha que contenha a palavra debug Eu quero colocar essa linha em um novo arquivo chamado debug.txt e todas as outras linhas devem ir para info. txt.

Qual é a melhor maneira de fazer isso? Eu tentei fazer um loop while, mas não consegui descobrir. Obrigado

    
por azo_blnt 07.07.2015 / 05:38

2 respostas

4

há um caminho zilhão para fazer isso, os dois primeiros que vieram com são awk e grep (nessa ordem)

awk

awk '/debug/ { print > "debug.txt" ; next ;} { print } ' logfile > info.txt

onde

  • /debug / selecione linha com debug de palavras
  • { print > "debug.txt" ; print para debug.txt
  • next ;} leu a próxima linha no logfile
  • { print } se não houver depuração, imprima para stdout
  • > info.txt redirecionar stdout para info.txt

um comando mais formal

awk '/debug/ { print > "debug.txt" ; } 
  $0 !~ /debug/ { print > "info.txt " ; } ' logfile

onde

  • $0 !~ /debug/ significa que, se a depuração não aparecer na linha.

grep

 grep    debug logfile > debug.txt
 grep -v debug logfile > info.txt

onde

  • grep debug seleciona linha com depuração
  • grep -v debug seleciona linha sem depuração
  • logfile é lido duas vezes

observe também que o conteúdo anterior de debug.txt e info.txt será excluído usando > para mantê-lo, use >> no shell ou no awk.

    
por 07.07.2015 / 05:52
2

Aqui está um script bash para fazer o trabalho:

while IFS= read -r line; do
    if [[ $line =~ debug ]]; then
        echo "$line" >>debug.txt
    else
        echo "$line" >>info.txt
    fi
done <log.txt
    
por 07.07.2015 / 05:57