Eu notei este interessante conjunto de comandos hoje:
$ seq 5 > alfa.txt
$ awk '{print 6 > ARGV[1]} 1' alfa.txt
1
2
3
4
5
$ cat alfa.txt
6
6
6
6
6
Minha primeira pergunta foi por que estou recebendo vários 6
em vez de apenas um, mas lembrei que você precisa fechar cada vez:
awk '{print 6 > ARGV[1]; close(ARGV[1])} 1' alfa.txt
No entanto, o que também me intriga é se estou sobrecarregando a entrada desde o início, como ainda posso ler o arquivo inteiro? Meu palpite é que o Awk está realmente gravando em um buffer e, em seguida, gravando no arquivo real no final ou talvez toda vez que o buffer for preenchido.
Se o último for verdadeiro, qual é o tamanho do buffer?
É dependente da implementação, mas você está vendo o awk abrir o arquivo de saída depois de abrir sua entrada. O arquivo de entrada original é perdido, exceto pelo descritor de arquivo aberto do awk que ele lê.
Isso não é apenas awk que poderia fazer isso: é comum a muitos aplicativos ...
ps: o buffer é o seu disco (tamanho não determinável pela pergunta).
Pelo menos no meu sistema, parece ser 32768 de um arquivo e 65536 de um pipe: