마지막 열을 기준으로 숫자를 정렬하는 방법은 무엇입니까?


23

이 입력이 있습니다.

sdkxyosl 1
safkls 2
asdf--asdfasxy_asd 5
dkd8k  jasd 29
sdi44sw 43
asasd afsdfs 10
rklyasd 4

이 출력이 필요합니다.

sdi44sw 43
dkd8k  jasd 29
asasd afsdfs 10
asdf--asdfasxy_asd 5
rklyasd 4
safkls 2
sdkxyosl 1

그래서 마지막 열을 기준으로 줄을 정렬해야합니다.

한 줄에 몇 개의 열이 있는지 모르겠습니다.

나는 그것을 알아낼 수 없다. 나는 "펄 파워"가 없다. 나는 단지 sed, awk, cut 등으로 ~ 평균 스크립팅 능력을 가지고 있습니다.

누군가 그것을하는 방법을 알고 있습니까?

답변:


34

다음 명령 줄은 awkfile.txt의 각 줄의 마지막 필드를 앞에 붙이고 숫자를 반대로 정렬 한 다음 cut추가 된 필드를 제거하는 데 사용 합니다.

awk '{print $NF,$0}' file.txt | sort -nr | cut -f2- -d' '

으 ... 나는 $ RS에 대해 몰랐다!! 대단히 감사합니다 !!!!!
LanceBaynes

@forcefsck : 나는 그것이 가능하다고 생각하지 않습니다 sort -k. begfieldGNU 정렬 의 함수는 0으로 카운트 다운됩니다. 당신의 데코레이션-소트-데코 르 테이트 (DSU) 접근법이 제가 생각하는 가장 좋은 방법 인 것 같습니다.
Mikel

관심이 $NF,$RS없는 이유는 $NF,$0무엇입니까? 나는 그것을 몰랐다 $RS. (나는 그것과 $NF,$"\n"동일하다고 생각하지만, 그것이 생각하는 것도 놀랍습니다.)
Mikel

2
@ johnny8888, @forcefsck : awk에서 $어떤 식 으로든 뒤에 올 수 있습니다. " 음수가 아닌 정수 이외의 것으로 평가되는 필드 번호 표현식의 효과는 지정되지 않았습니다 ." 내 시스템에서 GNU awk는 문자열 "\n"을 0으로 취급 합니다. 기타 (예 : A, W 및 K의 원래 구현)는 오류 메시지와 함께 중단됩니다. 경우 RS숫자를 우연히, 당신은 어떤 구현에 해당 필드를 얻을 것입니다. 이 작업을 수행하지 마십시오 $0.
질 'SO- 악마 그만'

1
정말 깔끔합니다! 그래서 무슨 일이 일어나고 있는지에 대한 긴 설명 : awk를 사용하여 마지막 필드를 먼저 인쇄 한 다음 전체 레코드를 인쇄하고 숫자 순으로 정렬 한 다음 cut을 사용하여 첫 번째 열을 잘라냅니다.
phyatt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.