2010-08-18 7 views
13

나는 bash에서 탭으로 구분 된 파일의 각 열에 고유 한 값을 얻으려고했다. 그래서 다음 명령을 사용했습니다.bash에서 정렬하기

cut -f <column_number> <filename> | sort | uniq -c 

그것은 잘 작동하고 나는 독특한 컬럼의 값과 그 수를 얻을 수 있습니다처럼 내가 뭘 원하는 (대신 열 값 이름으로 정렬입니다

105 Linux 
55 MacOS 
500 Windows 

이 예에서는 어떤 OS 이름입니다.) 개수에 따라 정렬하고 가능하면이 출력 형식의 두 번째 열에 개수를 포함하려고합니다. 따라서 다음과 같이 표시되어야합니다 :

Windows 500 
MacOS 105 
Linux 55 

어떻게해야합니까?

답변

14

사용 : 숫자 값으로 첫 번째 필드를 사용하여 역순으로

cut -f <col_num> <filename> 
    | sort 
    | uniq -c 
    | sort -r -k1 -n 
    | awk '{print $2" "$1}' 

sort -r -k1 -n 종류. awk은 단순히 열의 순서를 바꿉니다. 당신은 추가 파이프 라인 (더 좋은 서식)하여 명령을 테스트 할 수 있습니다

pax> echo '105 Linux 
55 MacOS 
500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}' 
Windows  500 
Linux  105 
MacOS   55 
+3

나는 보통 종류 -k1,1' 종류는 지정된 필드로, 그렇지 않으면 선이 줄의 끝으로 필드 1에서 모든 필드으로 분류되어하는'할 도움이 될 것입니다. – Hasturkun

2

광산 :

cut -f <column_number> <filename> | sort | uniq -c | awk '{ print $2" "$1}' | sort 

이것은 열 순서 (AWK)를 변경 한 후 바로 출력을 정렬합니다.

희망이 당신이

+1

개수가 아니라 이름순으로 정렬됩니다. –

+0

물론, sfactor 질문에서 : "내가 원하는 것은 컬럼 값 이름으로 정렬하는 것이 아니라" – sourcerebels