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

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

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

Поля разделены; Точка с запятой. Дополнительный столбец имеет формат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"

решение1

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

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"

решение2

Если ваш CSV-файл не имеет заголовка, нет пробелов после точки с запятой и только один символ VAREXT...в строке, то применительно к вашему образцу попробуйте:

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

Где значениеВАРЕКСТможет состоять из букв, цифр и пробелов.

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