GNU 정렬 및 자식 비난 이름 (필드 2), 시간

오늘 나는 간단한 작업을하고 있다고 생각했습니다.

git blame file | sort -k 3

모든 행을 file마지막으로 변경된 날짜별로 정렬합니다. 불행히도 올바르게 정렬하지 않은 것 같습니다. 그것은 않습니다 나는 다음을 수행하면 작동 :

git blame file | cut -c 20- | sort

이것은 라인의 첫 부분을 해킹 한 다음 정렬합니다. 이 명령의 성공은 실제로 내가 시도한 작업을 수행 sort 할 수 있음을 나타냅니다 . 왜 작동하지 않습니까?

다음은 출력 결과의 예입니다 git blame file.

35d8e9eb (username 2007-01-17 03:58:04 +0000 155) Some text on line 155

편집 : 3원래 명령 줄 이외의 합리적인 숫자를 사용하면 잘 작동하는 것 같습니다-해시 (필드 1), 사용자 이름 (필드 2), 시간 (필드 4) 또는 행 번호 (필드 6) 그러나 날짜 (필드 3)가 작동하지 않습니다-실제로 어떤 순서로 끝나는 지 전혀 알 수 없습니다 …

편집 2 : 동일한 문제를 보여주는 위생 처리 된 입력 파일을 만들었습니다. 여기 있습니다 cleaned.txt:

cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

그리고 출력 sort -k 3 cleaned.txt:

$ sort -k 3 cleaned.txt
cb7bb041 (eeeeeee  2010-12-14 19:41:18 +0000  42)
35d8e9eb (cccccccc 2007-01-17 03:58:04 +0000 135)
d7377fa9 (hhhhhhhh 2010-01-30 04:26:28 +0000 178)

보시다시피 날짜 필드에서 정렬이 전혀 수행되지 않은 것으로 보입니다. 출력은 다음과 같습니다 cut -c 20- cleaned.txt | sort.

$ cut -c 20- cleaned.txt | sort
2007-01-17 03:58:04 +0000 135)
2010-01-30 04:26:28 +0000 178)
2010-12-14 19:41:18 +0000  42)

이 경우 날짜를 정렬하면 잘 작동합니다! 어떤 제안?



답변

방금 알아 냈어요 짧은 사용자 이름 eeeeeee은 날짜 필드 앞에 추가 공간이 있음을 의미합니다. 에 대한 필드 구분 기호 sort는 공백이 아닌 공백으로 바뀌기 때문에 사용자 이름이 짧은 줄의 날짜 필드에는 키 필드의 일부로 해당 공간이 있으며 먼저 정렬됩니다. 간단한 수정 :

git blame file | sort -b -k 3


답변