이상한 버퍼 크기

이상한 버퍼 크기

오늘 저는 다음과 같은 흥미로운 명령 세트를 발견했습니다.

$ 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

첫 번째 질문은 왜 하나가 아닌 여러 개를 얻었는지 6였지만 매번 닫아야 한다는 것을 기억했습니다.

awk '{print 6 > ARGV[1]; close(ARGV[1])} 1' alfa.txt

그러나 혼란스러운 점은 처음부터 입력을 삭제해도 어떻게 전체 파일을 탐색하고 읽을 수 있다는 것입니다. 내 생각에는 Awk가 실제로 버퍼에 쓰고 마지막에 또는 버퍼가 가득 찰 때마다 실제 파일에 쓰는 것 같습니다.

후자가 사실이라면 버퍼 크기는 얼마입니까?

답변1

구현에 따라 다르지만 awk가 입력을 연 후 출력 파일을 여는 것을 볼 수 있습니다. awk가 읽은 열린 파일 설명자를 제외하고 원래 입력 파일은 손실됩니다.

이 작업을 수행할 수 있는 것은 단지 awk가 아닙니다. 많은 응용 프로그램에서 일반적입니다...

ps: 버퍼는 디스크입니다(질문에서 크기를 결정할 수 없음).

답변2

적어도 내 시스템에서는 파일에서 32768, 파이프에서 65536인 것 같습니다.

$ yes | head -100000 | tee file > pipe

$ awk '{print "n" > ARGV[1]}' file

$ sed s/y/n/ pipe | awk 'BEGIN {while (getline < "-") print > ARGV[1]}' pipe

$ wc -l file pipe
 32768 file
 65536 pipe

관련 정보