입력 "정렬"에 파이프를 사용해야 할까요, 아니면 리디렉션을 사용해야 할까요?

입력 "정렬"에 파이프를 사용해야 할까요, 아니면 리디렉션을 사용해야 할까요?

나하고 싶어

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파이프를 통해 sort49611 시스템 호출을 제공 하고 다음을 수행합니다.

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

관련 정보