Sort 명령은 문자열 출력을 변경합니다.

Sort 명령은 문자열 출력을 변경합니다.

sort 명령과 관련된 예외를 우연히 발견했지만 왜 이런 일이 발생하는지 설명을 찾을 수 없습니다.

다음 명령을 실행하십시오.

cat ~/.bash_history | uniq -c | sort -h -r | head

시스템에서 실행한 가장 일반적인 10개의 명령 시퀀스를 출력하도록 되어 있지만 대신에 실패하고 출력이 마치 한꺼번에 실행한 것처럼 나타납니다.

그러나 실행할 때:

cat ~/.bash_history | sort | uniq -c | sort -h -r | head

작동하는 것 같지만 이유를 이해할 수 없습니다. 누군가 설명할 수 있습니까?

답변1

uniq필터만가까운철사. 다음과 같은 파일이 있다고 가정해 보겠습니다.

$ cat foobar.txt
foo
bar
foo

인접하지 않은 두 개의 선이 있습니다 foo. 그런 다음 각 파일은 uniq -c한 번 계산되는 반면, 파일을 먼저 정렬한다는 것은 해당 uniq -c파일을 인접한 것으로 처리하고 두 번 나타나는 줄로 계산하는 것을 의미합니다.

$ uniq -c foobar.txt
  1 foo
  1 bar
  1 foo
$ sort foobar.txt | uniq -c
  1 bar
  2 foo

답변2

uniqPOSIX 유틸리티입니다. 당신은 그것을 사용했고 uniq -c다음과 같이 작동합니다 :

uniq유틸리티는 비교를 위해 입력 파일을 읽어야 합니다.가까운행을 작성하고 출력에 각 입력 행의 복사본을 씁니다. 두 번째 및 후속 사본 복제가까운입력 라인을 작성하면 안 됩니다. 비교할 때 입력의 각 줄 끝은 무시되어야 합니다.

입력의 중복 행이 인접하지 않은 경우 감지되어서는 안 됩니다.

[…]

-c
각 출력 라인 앞에 입력에서 해당 라인이 나타나는 횟수를 추가합니다.

(원천, 강조 내)

즉, 인접하지 않은 선은 다른 선으로 간주됩니다. 귀하의 사용 사례에서는 sort먼저 동일한 선을 인접하게 만들어야 합니다 . 그래야만 uniq하고 싶은 일을 할 수 있을 것이다.

관련 정보