Procure linhas no arquivo de texto para o padrão entre duas posições e imprima a linha inteira

2

Como posso pesquisar linhas em um arquivo de texto para um padrão entre duas posições e imprimir a linha inteira onde esse padrão é encontrado? Eu estou trabalhando com arquivos de largura fixa. Entendo como fornecer uma lista de comprimentos para cada campo para awk , mas estou interessado apenas em pesquisar um único campo para o padrão. Existe uma solução mais simples que não envolva a especificação do tamanho de cada campo?

Aqui está uma única linha de texto do arquivo. Como posso encontrar todas as linhas que possuem 'Cook Co. IL' entre as posições 18 e 57 e não em outro lugar da linha?

17 031 1602 1600 Cook Co. IL                              047 011 9999 9999 Bradley Co. TN                                16
    
por eric s 29.06.2017 / 18:40

3 respostas

3
Solução

awk :

awk 'substr($0,18,57-18)~/Cook Co\. IL/' file

substr(string, start [, length ])
Return a length-character-long substring of string, starting at character number start.

    
por 29.06.2017 / 18:48
2

Não é difícil especificar as larguras de campo, uma vez que você só quer considerar a linha como três campos (0-17, 18-57, 58 +):

awk -v FIELDWIDTHS="17 40"  -e '$2 ~ /Cook Co\. IL/'
    
por 29.06.2017 / 18:56
0
sed -e 'h; s/./&\n/57; /^.\{17\}.*Cook Co[.] IL.*\n/!d; g' yourfile

Marque o limite direito e restrinja usando ^ o limite esquerdo. Dentro desta região, procure o regex. Se encontrado, imprima o porão que tem orig. linha.

    
por 29.06.2017 / 20:09