다음과 같은 입력이 있습니다.
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