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.