С помощью awk
вы можете добавить :
к последнему полю (то есть фамилию плюс все, что следует за ней) сортировать
по 1-му и 3-му полям (это раз, используя :
в качестве разделителя полей) затем снова с помощью awk
удалите первый :
из последнего поля:
awk '$NF=":"$NF' infile | sort -t : -k1,1 -k3,3 | awk 'sub(/:/, "", $NF)'
конечный результат:
east:Lilly Batsuro:58:85:84:52
east:Shirley Couts:66:57:67:37
east:Daniel Liebelt:83:78:84:61
east:James Peringer:50:62:56:94
east:Sam Smith:52:72:78:62
west:Carmen Gondar:62:58:85:56
west:Kim Husak:89:91:63:64
west:Alex Opitz:79:68:57:93
west:Lenny Taufa:53:61:82:52
west:Derek Willard:63:69:74:43
sed -e 's/"p"$/0/; t' -e 's/"e"$/1/' filename.csv
С помощью t
мы разветвляемся, если первая замена успешна, предотвращая попытку второй замены. Это обычная идиома для выполнения не более одной замены в строке.
В вашем первом sed
отсутствует завершающий /
.
Используйте sed - i 's / "p" $ / 0 /' filename.csv