Dada 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
Substitua as últimas palavras da linha por números. Ordenar usando esses números. Em seguida, substitua-as pelas palavras originais:
$ 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
Como alternativa, prefixar cada linha por um número, dependendo da última palavra na linha e classificar esse número. Em seguida, remova essa primeira coluna:
$ 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