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.
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
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/'
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.
Tags grep text-processing awk