![마지막 열을 기준으로 숫자를 정렬하는 방법은 무엇입니까?](https://linux55.com/image/1110/%EB%A7%88%EC%A7%80%EB%A7%89%20%EC%97%B4%EC%9D%84%20%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%A0%95%EB%A0%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
다음과 같은 입력이 있습니다.
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
다음 명령줄은 awk
file.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