extrai linhas de um arquivo baseado em um par sequencial de padrões, e imprimo em arquivos separados [closed]

1

a) eu tenho um arquivo enorme, do qual eu preciso extrair todas as linhas que correspondem a padrões específicos, vamos dizer paterna e patternb. Então eu preciso extrair todas as linhas que começam com patterna algo como ^ patterna, e todas as linhas, que começam com patternb algo como ^ patternb. Em seguida, grave a saída em um arquivo denominado patternapatternb.txt

b) como eu poderia fazer este trabalho com um loop. Por exemplo, faça o mesmo para patterna2 e patternb2, faça o mesmo com patterna3 e patternb3, portanto, o arquivo será analisado muitas vezes, com novos pares de padrões para corresponder às linhas de cada vez e, finalmente, a saída será de três arquivos:

patternapatternb.txt
patterna2patternb2.txt
patterna3patternb3.txt

entrada de amostra
001 876786
989 74563
734 87387

600: sometext
601: someothertext

001 712345
345 87238

600: sometext
702: differenttext

001 5342
989 745632
734 873872

600: sometext
601: someothertext

001 987 345 87238

600: sometext
702: differenttext

patterna: ^ 001 patternb: 600: sometext

a saída seria um arquivo chamado 600: sometext.txt

001 876786
600: sometext
001 712345
600: sometext
001 5342
600: sometext
001 987
600: sometext

Na verdade, o primeiro elemento no par de padrões, será o ^ 001, e o segundo, cada ocorrência de uma linha que começa com três dígitos, seguida por um:, então um espaço

    
por nupu bebi 21.09.2016 / 15:18

1 resposta

1

awk '/patterna/ || /patternb/ { print > "patternapatternb.txt" }
     /patternc/ || /patternd/ { print > "patterncpatternd.txt" }
     # ... more rules following same scheme; replace with real patterns ...
     /patterny/ || /patternz/ { print > "patternypatternz.txt" }' inputfile

Coloque o código em um arquivo script.awk e chame com awk -f script.awk inputfile . Ou então, faça uma linha de comando de várias linhas como acima. No shell GNU Bash, uma nova linha pode ser inserida usando Ctrl + V Ctrl + J *

Há apenas um loop (o loop de processamento de registro implícito realizado por awk ). Apenas uma passagem pelo arquivo é necessária.

* Você pode usar Enter para adicionar uma nova linha entre aspas apenas quando adicionar novos caracteres no final da linha e uma cotação aberta estiver pendente.

    
por 21.09.2016 / 19:02