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

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

대량의 파일을 차례대로 정리하고 있습니다. 사용 sort -o file file. for 루프가 중간에 중지되고 다시 시작하기 전에 -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

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

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

정렬할 파일이 많고 중단이 자주 발생하는 경우 다시 정렬하기 전에 어떻게든 완료된 파일을 추적해야 합니다.

관련 정보