Imprime linhas após padrão em vários arquivos

0

Eu tenho um arquivo com o mesmo padrão várias vezes. Algo como:

   time
   12:00
   12:32
   23:22
   time
   10:32
   1:32
   15:45

Eu quero imprimir as linhas depois do padrão, no exemplo time em vários arquivos. O número de linhas após o padrão é constante. Eu encontrei a primeira parte da minha pergunta com awk '/time/ {x=NR+3;next}(NR<=x){print}' filename Mas não tenho ideia de como exportar cada parte em arquivos diferentes.

    
por ziulfer 27.02.2016 / 08:47

3 respostas

1

Use o redirecionamento de linha em awk , por exemplo,

$ awk '{print "hello" >> "/tmp/hello"; print "world" >> "/tmp/world"}'

Você pode usar uma matriz para os arquivos definidos no BEGIN e usá-los (em awk ) desta forma:

BEGIN{files[1]="first-file";
      files[2]="second-file";
      line=0}
/time/{line=NR}
{print >> files[NR-line]}
    
por 27.02.2016 / 09:23
0

Use as opções de saída contextual para grep . Se você quiser as três linhas após cada ocorrência de time em (digamos) todos os arquivos em um diretório:

grep -A3 'time' /path/to/files/*

grep tem três opções contextuais - A para linhas Após uma correspondência; B para linhas Antes de uma correspondência e C para Contexto completo (linhas antes e depois de uma correspondência). Se você quiser dividir ainda mais a saída de grep e você sabe que cada correspondência dará quatro linhas de saída, você pode enviar a saída para split -l4 .

    
por 27.02.2016 / 09:33
0

Com o novo GNU sed

nl -bptime filename | 
sed -n '/time/{N;N;N;s/\([0-9]\+\)[^\n]*\n/echo >.txt \"/;s/$/\"/e;}'

imprimirá 3 linhas depois de time cada para o (s) arquivo (s) N.txt onde N corresponde a time ocorrência em filename

    
por 27.02.2016 / 15:08