次の入力があります。
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
したがって、最後の列に基づいて行を並べ替える必要があります。
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です。 こんにちは、私の名前はJoyです:45 こんにちは、私の名前はロイです:23 こんにちは。私の名前はジョンです:4
バラより8.1.6 gawkの事前定義された配列スキャン順序の使用より多くのソートアルゴリズムと8つの強力なawk組み込み変数 – FS、OFS、RS、ORS、NR、NF、FILENAME、FNR