![입력 "정렬"에 파이프를 사용해야 할까요, 아니면 리디렉션을 사용해야 할까요?](https://linux55.com/image/55888/%EC%9E%85%EB%A0%A5%20%22%EC%A0%95%EB%A0%AC%22%EC%97%90%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%20%ED%95%A0%EA%B9%8C%EC%9A%94%2C%20%EC%95%84%EB%8B%88%EB%A9%B4%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC%20%ED%95%A0%EA%B9%8C%EC%9A%94%3F.png)
나하고 싶어
awk -F "," '{print $1 }' inputfile1.txt | sort -u > distinctOutput.txt
성능면에서는 괜찮은가요? 아니면 awk가 전체 출력 덤프를 완료할 때까지 sort를 기다리는 것이 더 낫다고 생각하므로 임시 파일을 리디렉션/사용해야 합니까? 아니면 내부적으로 처리되나요?
(AIX 6.1)
답변1
sort
임시 파일은 자동으로 사용되는 것 같아요 . 기사의 여러 곳에서 임시 직원이 언급됩니다.man
그리고info
다음을 포함하는 페이지 sort
:
--compress-program=PROG
compress temporaries with PROG; decompress them with PROG -d
-T, --temporary-directory=DIR
use DIR for temporaries, not $TMPDIR or /tmp; multiple options
specify multiple directories
환경 변수 TMPDIR이 설정되면 sort는 해당 값을 /tmp 대신 임시 파일용 디렉터리로 사용합니다. --temporary-directory (-T) 옵션은 환경 변수를 재정의합니다.
테스트하기 위해 다음을 실행했습니다.
base64 < /dev/urandom | sort
메모리 사용량이 빠르게 안정화됩니다 base64
( sort
) top -bn1 | grep 'base64|sort'
.
21877 root 20 0 11.1m 0.6m 0.5m R 63.9 0.0 7:23.46 base64
21878 root 20 0 21.4m 8.2m 0.8m R 31.9 0.4 4:44.15 sort
/tmp
통화 중에 수백 개의 임시 파일을 볼 수 있습니다 sortXXXXXX
.
$ ls /tmp/sort* | head
/tmp/sort03IIcQ
/tmp/sort052vXK
/tmp/sort07ZCcO
/tmp/sort09yrTN
/tmp/sort0anX08
/tmp/sort0BruPR
/tmp/sort0EgCYY
/tmp/sort0GsbQs
/tmp/sort0hCMDD
/tmp/sort0hdSMT
$ ls /tmp | grep -c sort
1990
따라서 임시 파일에 대해 걱정할 필요가 없다고 말하고 싶습니다 sort
. 가장 좋은 방법은 임시 파일의 위치가 빠른 파일 시스템(SSD 등 tmpfs
)에 있는지 확인하는 것입니다.
면책조항: 저는 GNU 정렬만 고려했습니다.
위의 분석은 GNU 정렬에만 적용되지만,AIXsort
링크된 매뉴얼에 따르면 임시 파일도 사용되거나 적어도 임시 파일의 디렉터리가 사용됩니다. 이것을 테스트할 수 있는 AIX 시스템이 없습니다.
POSIX임시 파일에 대한 언급이 없으므로 이는 제공되지 않습니다.
답변2
대용량 파일(쉼표로 구분, csv, 2173762행, 186MB)로 동작을 테스트했습니다.
awk
파이프를 통해 sort
49611 시스템 호출을 제공 하고 다음을 수행합니다.
real 0m5.134s
user 0m5.048s
sys 0m0.080s
awk
임시 파일로 저장한 다음 sort
두 번째 단계의 파일에서 49719 시스템 호출이 발생했습니다.
real 0m6.006s
user 0m5.836s
sys 0m0.152s
다른 방법으로도 sort
( sort -k1 -u
) 먼저 파이핑하면 awk
더 나쁜 결과가 나옵니다(47533 시스템 호출).
real 0m17.937s
user 0m17.565s
sys 0m0.348s
결론적으로: 가장 자원 친화적인 방법을 찾은 것 같습니다. 아니면 더 빠른 방법을 찾을 수 없습니다.
- 이상한:
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
- 유형:
sort (GNU coreutils) 8.13