Удалить конкретный столбец, если он существует в файле CSV

У меня есть файл CSV, содержащий около 25 столбцов. Некоторые строки файла содержат 26 столбцов, поэтому я хочу искать строки, содержащие этот дополнительный столбец, и удалять его, чтобы использовать awk со всем файлом.

Поля разделяются ; Точка с запятой . Дополнительный столбец находится в формате VARNAME = «Текст здесь», а значение «текст здесь» – это произвольный текст.

Мне удалось удалить VARNAME со всех строк, но я не могу исследовать шаблон, который соответствует произвольному значению (цитируемый текст).

Моя цель – найти строки с этим дополнительным столбцом ( VARNAME = «Текст здесь» ) и удалить его.

Пример:

Текущий файл:

ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3" ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6" 

Целевой файл должен быть:

 ROW1: VAR1:"Value 1";VAR2="Value 2";VAR3="Value 3" ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6" 

Вы можете использовать что-то вроде:

 sed 's/;VAREXT.[^;]*//' file #combine with -i for in-place editing 

Тестирование:

 a=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="Different Values";VAR3="Value 6"' b=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="1234567";VAR3="Value 6"' c=$'"ROW2: VAR1:"Value 4";VAR2="Value 5";VAREXT="VAREXT";VAR3="Value 6"' echo "$a" |sed 's/;VAREXT.[^;]*//' echo "$b" |sed 's/;VAREXT.[^;]*//' echo "$c" |sed 's/;VAREXT.[^;]*//' "ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6" "ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6" "ROW2: VAR1:"Value 4";VAR2="Value 5";VAR3="Value 6" 

Ожидая, что ваш csv не имеет заголовка, после точки с запятой нет пробелов и только один VAREXT... на строку, то по отношению к вашему образцу попробуйте:

 sed 's/;VAREXT=\"[A-Za-z0-9 ]*\"//' in.csv 

Где значение VAREXT может быть составной буквой , цифрами и пробелами.