file.txt
タブで区切られます。
RollNo Names Class Subject Position
101 Anna V Maths Average
102 Bob V Maths Good
103 Charles VI Science Good
104 Darwin VI Science Improve
105 Eva VII English Improve
Good
この行を、、Average
順に表示するように並べ替えたいと思いますImprove
。
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
ベストアンサー1
一方file.txt
:
RollNo Names Class Subject Position
101 Anna V Maths Average
102 Bob V Maths Good
103 Charles VI Science Good
104 Darwin VI Science Improve
105 Eva VII English Improve
行の最後の単語を数字に置き換えます。この数字で並べ替えてください。次にそれを元の単語に置き換えます。
$ sed -e 's/Good$/1/' -e 's/Average$/2/' -e 's/Improve$/3/' file.txt | sort -k5n | sed -e 's/1$/Good/' -e 's/2$/Average/' -e 's/3$/Improve/'
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve
または、その行の最後の単語に基づいて各行の前に数字を追加してから、その数字に基づいてソートします。次に、最初の列を削除します。
$ awk 'NR==1 {n=0} $NF=="Good" {n=1} $NF=="Average" {n=2} $NF=="Improve" {n=3} { print n, $0 }' file.txt | sort -n | cut -d' ' -f2-
RollNo Names Class Subject Position
102 Bob V Maths Good
103 Charles VI Science Good
101 Anna V Maths Average
104 Darwin VI Science Improve
105 Eva VII English Improve