
У меня есть 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
Где значениеВАРЕКСТможет состоять из букв, цифр и пробелов.