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

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

다음과 같은 입력이 있습니다.

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 등에 대한 평균적인 스크립팅 기술만 가지고 있습니다.

이 작업을 수행하는 방법을 아는 사람이 있나요?

답변1

다음 명령줄은 awkfile.txt의 각 줄의 마지막 필드를 추가하고 역숫자 정렬을 수행한 다음 cut추가된 필드를 제거하는 데 사용됩니다.

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

답변2

마지막 열을 숫자 내림차순으로 정렬암소 비슷한 일종의 영양이상한:

awk '{
       # save current row in array with current row number as index
       row[NR]=$0

       # save current last field in array with current row number as index
       last[NR]=$NF
     }
     END{
       # sort array "last" numerically ("num") based on its
       # values ("val") descending ("desc")
       PROCINFO["sorted_in"]="@val_num_desc";

       for(i in last)
         print row[i]
     }' file

한 줄로:

awk '{ row[NR]=$0; last[NR]=$NF } END{ PROCINFO["sorted_in"]="@val_num_desc"; for(i in last) print row[i] }' file

산출:

안녕하세요. 제 이름은 조던입니다: 476
안녕하세요. 제 이름은 Manu:98입니다.
안녕하세요, 제 이름은 조이입니다: 45
안녕하세요, 제 이름은 로이입니다: 23
안녕하세요. 제 이름은 John입니다: 4

바라보다8.1.6 gawk의 사전 정의된 배열 스캔 순서 사용더 많은 정렬 알고리즘과8개의 강력한 awk 내장 변수 – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

관련 정보