Use isso:
awk -F, '{print FNR}' file1 file2
A variável FNR
no awk fornece o número de registros para cada arquivo de entrada. Mas, quando você usa cat .. | awk
awk lê o descritor de arquivo stdin, portanto o awk vê apenas 1 "arquivo".
Tente entender melhor ( FILENAME
contém o arquivo atual sendo processado):
$ awk -F, '{print FILENAME" "FNR}' file1 file2
file1 1
file1 2
file1 3
file2 1
file2 2
file2 3
file2 4
$ cat file1 file2 | awk -F, '{print FILENAME" "FNR}'
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Como você pode ver no primeiro exemplo, há dois arquivos sendo processados, no segundo exemplo o FILENAME
é -
, indicando a entrada padrão.
Editar: Veja o seguinte exemplo:
$ cat file1 | awk -F, '{print FILENAME" "FNR}' - file1 <(cat file1)
- 1
- 2
- 3
file1 1
file1 2
file1 3
/dev/fd/63 1
/dev/fd/63 2
/dev/fd/63 3
Primeiro, o awk lê a partir do stdin (a parte cat file1
, também como um parâmetro -
to awk). Então o regular file1
. Finalmente, a parte <(cat file1)
, que cria um canal ( /dev/fd/63
), de onde o awk lê.