Eu tentaria
awk '/PATTERN/ { c[FILENAME]++ ; if (c[FILENAME]==7) print ; } ' yyyymmdd*.log
onde
- o truque
c[FILENAME]selecionará a 7ª linha em cada arquivo.
Eu tenho um arquivo que é 2760 linhas com um id na linha 2740. Nos resultados eu sempre preciso dele para a linha de saída 7 do topo. Existem arquivos que contêm muito mais linhas e alguns que contêm menos, mas a saída é sempre o valor na linha 7.
Estou usando grep 'PATTERN' | sed -n '7p' yyyymmdd*.log , isso parece corresponder ao padrão, mas à linha de saída 7 do primeiro arquivo encontrado no diretório.
Gostaria que alguém me desse um empurrão na direção certa?
Eu tentaria
awk '/PATTERN/ { c[FILENAME]++ ; if (c[FILENAME]==7) print ; } ' yyyymmdd*.log
onde
c[FILENAME] selecionará a 7ª linha em cada arquivo. Com o GNU sed , isso deve ser possível. Por exemplo, para exibir apenas o número da linha, se incluir o PATTERN do seu arquivo yyyymmdd*.log , tente:
sed -n '2740s/PATTERN/PATTERN/p' yyyymmdd*.log
Isso fará o prefácio do comando search para sed com o número de linha especificado (2740), e -n e p suprimirão a saída, a menos que seja correspondida.
Você precisa da linha 7 de cada arquivo de entrada correspondente a um determinado padrão de nome de arquivo?
awk 'FNR==7' file*
A awk variable FNR será o número da linha do arquivo de entrada atual. Se for 7, a linha é impressa.
Ou com o GNU sed :
sed -n -s '7p' file*
O% GNU sed option -s fará com que o contador interno de linha seja reiniciado entre os arquivos de entrada (esta é uma extensão GNU para o padrão sed )
Se você precisar filtrar o resultado em alguma expressão regular, basta enviar a saída por meio de grep 'PATTERN' ou, com awk :
awk 'FNR==7 && /PATTERN/' file*
ou, com GNU sed :
sed -n -s '7{/PATTERN/p}' file*
Seu comando:
grep 'PATTERN' | sed -n '7p' yyyymmdd*.log
Algumas questões:
grep não tem entrada e estará aguardando entrada em seu fluxo de entrada padrão. sed só selecionará a sétima linha do conjunto completo de arquivos de entrada (isto é, somente do primeiro arquivo). Seu contador de linha não redefine entre arquivos. Usando o GNU sed com -s , como acima, corrige isso. sed não lerá de grep . grep não é necessário. Você só precisa da linha 7.