Linux で最後の列の次の列を並べ替える

Linux で最後の列の次の列を並べ替える

複数のファイルがあります:

ファイル 1

a 1 2

b 3 2

ファイル2

a 2 2 3

b 4 3 3

ファイル3

d 3 1 2 4

e 4 1 1 2

並べ替え後、最後の列の次の列に従ってファイルを並べ替えたいと思います。

ファイル 1

1つの32

b12

ファイル2

2つ33

4 ビ23

ファイル3

3 1日24

4 1 112

私はawkを使用しています:

while read line
do
cat $line|awk '{print $(NF-1)"\t"$0}'|\
         sort -n -r|awk '$1=" " {print $0}' > $line.sorted.txt
done < listfile.txt

もっと良い方法はあるでしょうか?(awk を使用すると、n (列数) が大きい場合に問題が発生します)

ありがとう、

答え1

次のようなものを試してみてください

for i in f*; do
  echo "=== $i" ;
  N=$( echo $( head -1 $i | wc -w ) -1 | bc );
  sort -nrk$N $i;
done

関連情報