изменить конкретный столбец с помощью sed или awk

Вы можете выполнить отрицание:

~/(xy|xy[^z]*)

или короче:

~/xy(|[^z]*)
2
11.12.2018, 16:01
4 ответа

Другое решение с awk :

awk -F, 'sub("^[0-9]+\\s","",$3)' OFS=, file 

Вывод:

qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52

Объяснение:

  • -F, : установить запятую в качестве поля ввода separator

  • OFS =, : установить запятую в качестве разделителя выходного поля (по умолчанию пробел)

  • sub ("^ [0-9] + \\ s", "", $ 3) : удалить числа, за которыми следует пробел в начале строки $ 3 , и распечатать текущую строку (поскольку "печать" является действием по умолчанию в awk )

Таким образом вы можно отредактировать нужный столбец и распечатать все остальные (их вообще может быть много).

4
27.01.2020, 21:51

Согласно показанным данным это может быть следующее sed

sed -r 's/,[0-9 ]+ /,/' file.csv

В случае изменения данных регулярное выражение следует изменить на более сильное

{ {1}}
0
27.01.2020, 21:51

В awk :

awk '{FS="[, ]"; OFS=","; print $1, $2, $4}' filename

В sed :

sed 's/^\(.*,\)[0-9]* \([^,]*\)$/\1\2/' filename
1
27.01.2020, 21:51

Я использовал awk :

awk -F"[ ,]" '{print $1","$2","$4 }' yourfile 

Результат:

qw12er,foo,bn5mgh
rt8yp,foo,gh78jk
bn852mv,foo,78ghjkh
tgbr,foo,ujmyhn
wsx2d,foo,ui52ohn
tgbr,foo,ujmyhn
ikl896o,foo,wsxdc52
3
27.01.2020, 21:51

Теги

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