정렬 옵션 -c(정렬되었는지 확인) 및 -o(출력 파일에 쓰기)가 호환되지 않는 이유는 무엇입니까?

정렬 옵션 -c(정렬되었는지 확인) 및 -o(출력 파일에 쓰기)가 호환되지 않는 이유는 무엇입니까?

많은 양의 파일을 차례로 정렬하고 있습니다. . sort -o file file​for 루프가 중간에 중단되었고 다시 시작하기 전에 sort 옵션을 사용하여 정렬 속도를 높이고 싶습니다 -c. 그런데 옵션이 호환되지 않는다고 하네요 -co. 왜 그래야만하지?

sort --version
sort (GNU coreutils) 8.13

OS: Ubuntu 12.10

답변1

출력을 생성하지 않는 --check만 수행하고 정렬된 --output을 특정 파일로 이동하도록 지정하기 때문입니다. 이는 상호 배타적인 개념이며 sort.c(gnu coreutils 8.20)에서 다음과 같이 시행됩니다.

  if (checkonly)
    {

      if (outfile)
        {
          static char opts[] = {0, 'o', 0};
          opts[0] = checkonly;
          incompatible_options (opts);
        }

답변2

GNU를 사용한다고 가정하면 sort언급한 옵션은 다음과 같습니다.

   -c, --check, --check=diagnose-first
          check for sorted input; do not sort
   -o, --output=FILE
          write result to FILE instead of standard output

플래그 -c는 입력이 이미 정렬되었는지 여부만 알려줍니다.

$ echo -e "A\nB\nC" | sort -c
$ echo -e "A\nC\nB" | sort -c
sort: -:3: disorder: B

따라서 입력이 정렬되면 아무것도 인쇄되지 않고 입력이 정렬되지 않으면 오류 메시지가 표준 오류에 인쇄됩니다. 즉, sort -c표준 출력으로 인쇄하지 마십시오. 인쇄되지 않으므로 출력을 리디렉션하는 것은 의미가 없습니다.

답변3

sort -c는 출력을 생성하지 않습니다. 파일만 확인합니다. 출력이 없으면 파일에 쓸 이유가 없습니다. 따라서 -o와 호환되지 않습니다.

파일을 정렬하기 전에 -c를 일종의 검사로 사용할 수 있지만 실제로 원하는 대로 작업 속도가 빨라질지는 확실하지 않습니다.

답변4

파일이 정렬되어 있는지 확인하는 것과 정렬하는 것은 큰 차이가 있습니다.

검사할 때 가장 좋은 경우 두 개의 항목이면 충분합니다(매우 빠릅니다). 정렬되지 않은 첫 번째 항목에서 명령이 종료되고 검사가 완료될 수 있지만 이 시점에서는 출력이 불완전할 수 있습니다. 최악의 경우는 다음과 같습니다. 파일이 정렬됩니다(이 경우에만 출력이 의미가 있습니다).

정렬할 파일이 많고 자주 중단되는 경우, 다시 정렬하기 전에 어떤 방식으로든 완료된 파일을 추적해야 합니다.

관련 정보