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


1

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

ファイル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

ある 3 2

b 1 2

ファイル2

2 3 3

b 4 2 3

ファイル3

d 3 1 2 4

e 4 1 1 2

私は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(columns)が大きい時にはいくつか問題があります)

ありがとう、

回答:


1

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

for i in f*; do
  echo "=== $i" ;
  N=$( echo $( head -1 $i | wc -w ) -1 | bc );
  sort -nrk$N $i;
done
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.