
У меня есть 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