두 번째 열에 따른 Linux 쉘 정렬 파일?


답변:


153

UNIX 인 경우 :

sort -k 2 file.txt

여러 -k플래그를 사용 하여 둘 이상의 열을 정렬 할 수 있습니다 . 예를 들어, 성을 기준으로 정렬 한 다음 이름을 타이 브레이커로 정렬하려면 :

sort -k 2,2 -k 1,1 file.txt

"man sort"의 관련 옵션 :

-k, --key = POS1 [, POS2]

POS1에서 키를 시작하고 POS2에서 종료합니다 (원점 1).

POS는 F [.C] [OPTS]입니다. 여기서 F는 필드 번호이고 C는 필드의 문자 위치입니다. OPTS는 하나 이상의 단일 문자 주문 옵션으로 해당 키에 대한 전역 주문 옵션을 재정의합니다. 키가 제공되지 않으면 전체 행을 키로 사용하십시오.

-t, --field-separator = SEP

공백이 아닌 전환 대신 SEP 사용


2
--field-separator=','"Billy Bob"과 같은 "이름"에 대한 값에 데이터 입력 연산자 유형이있을 수있는 경우 사용하는 데 약간주의해야합니다. 보호하지 않으면 공백이 데이터에 쉽게 들어갈 수 있지만 쉼표는 비교적 가능성이 낮습니다.
Tony Delroy

1
"Smith, Jr."와 같이 해당 필드에 쉼표가있을 가능성이 높습니다. 또는 "McDowell, Sr." 또는 "Dr. John"또는 "New York, NY"
jbnunn 2014

2
열이 시각적으로 정렬 된 경우 (즉, 각 필드 사이에 일정하지 않은 수의 공백이있는 경우) -b옵션을 사용해야합니다 . 이는 sort실제로 정렬 할 문자열이 열의 첫 글자가 아닌 쉼표 바로 뒤에서 시작한다고 생각 하기 때문 입니다. 또한 LC_ALL=C간단한 ASCII 파일에서도 발생할 수있는 로케일로 인한 부작용을 방지하기 위해 명령 앞에를 붙여야 할 수도 있습니다.
calandoa 2015

@calandoa -b( --ignore-leading-blanks) 에 대한 부분 감사합니다 . 비트를 명확히하기 : echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2부여 a<SPACE><SPACE>b제 (제 이후 두 번째 열이 시작 non-blank to blank transition하고 <SPACE><SPACE>b이전하다 <SPACE>a), 그러나와 -b그것이 제공 aa<SPACE>a예상 ( a이전이다 b).
Kirill Bulygin 2011

7

두 번째 필드로만 정렬하려면 (따라서 두 번째 필드가 일치하는 경우 일치하는 행은 다른 필드에서 정렬하지 않고 원래의 순서대로 유지됩니다) :

sort -k 2,2 -s orig_file > sorted_file

3

FWIW, 다음은 가장 좋은 메모리를 사용하는 프로세스를 보여주는 정렬 방법입니다.

memstat | sort -k 1 -t':' -g -r | less

정렬 옵션은 열 구분자로, 숫자 정렬 및 역순 정렬을 사용하여 첫 번째 열로 설정됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.