Как удалить и заменить разделитель полей из столбца с помощью awk?

Как удалить и заменить разделитель полей из столбца с помощью awk?

У меня есть CSV-файл такого вида:

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

Я хочу удалить первые ;и заменить последние, , чтобы вывод выглядел так:

name_var type_var,
id string,
dt_depot string,
num_artc string

решение1

Просто с sedзаменой:

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Что касается awkрешения, если предполагается, что входной файл содержит только 2 заполненных столбца, можно использовать следующее awkвыражение:

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

решение2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

Скрипт изменяет каждое ;в конце строки на ,затем преобразует каждое оставшееся ;в, ,присваивая значение полю, что приводит к изменению всех разделителей входных полей ( ;как установлено -F';') на разделитель выходных полей (по умолчанию пустое). Затем он печатает текущую строку, указывая истинное условие (1), которое вызывает действие по умолчанию ( print $0).

решение3

С awkчем-то вроде этого можно сделать работу:

awk -F\; '{print $1" "$2","}'

Если вам не нравится последняя запятая, ее можно переписать так:

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

решение4

С помощью этой команды:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

Вы получите такой результат:

name_var type_var,
id string,
dt_depot string,
num_artc string

Связанный контент