Awk Usando NR para gerar o número da iteração

0
Estou fazendo um loop de uma lista de arquivos, extraindo a linha final e imprimindo as colunas 8, 9 e 10. Também preciso imprimir na saída o 'número do evento', que é essencialmente o número total de registros sendo processos (NR). Como faço para imprimir o número do evento / registro na primeira coluna, saindo para o arquivo de saída, como o que eu tenho abaixo?

for i in 'ls -d *mcp'; do
tail -1 "$i" | awk  '{ printf "%s %s %s\n", $8, $9, $10}' >> ${Pout}${output}
done
echo "Finished Looping through each file."

O que eu quero como saída é:

1 45 60 5
2 30 67 3
3 40 12 4
.
.
.

em que a coluna '45 representa $ 8, 60 representa $ 9 e 5 representa $ 10. o 1,2,3, etc. é o que eu preciso para a saída. Eu essencialmente preciso imprimir o número da linha.

    
por geeb.24 13.05.2015 / 21:15

2 respostas

1

Tente isto:

for i in ./*.mcp; do
    if [ -f "$i" ]; then
        tail -1 "$i"
    fi
done | awk '{ print NR, $8, $9, $10 }'
    
por 13.05.2015 / 21:41
1

Com o GNU awk (versão 4.x) tente isto:

awk 'ENDFILE { printf "%d %s %s %s\n", ++c, $8, $9, $10}' *mcp > "${Pout}${output}"

echo "Finished Looping through each file."

Com outros awk s e shells como bash try:

for f in *mcp
do
    awk -v c="$((++c))" 'END { printf "%d %s %s %s\n", c, $8, $9, $10}' "$f"
done > "${Pout}${output}"

echo "Finished Looping through each file."
    
por 13.05.2015 / 21:41

Tags