Заменить последние символы в каждой строке

С помощью 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
4
06.03.2017, 17:35
3 ответа
sed 's/"p"$/0/;s/"e"/1/' file.txt
0
27.01.2020, 20:47
sed -e 's/"p"$/0/; t' -e 's/"e"$/1/' filename.csv

С помощью t мы разветвляемся, если первая замена успешна, предотвращая попытку второй замены. Это обычная идиома для выполнения не более одной замены в строке.

8
27.01.2020, 20:47

В вашем первом sed отсутствует завершающий / . Используйте sed - i 's / "p" $ / 0 /' filename.csv

3
27.01.2020, 20:47

Теги

Похожие вопросы