Удалить конкретный столбец, если он существует в файле 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" 

2 Solutions collect form web for “Удалить конкретный столбец, если он существует в файле CSV”

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

 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 может быть составной буквой , цифрами и пробелами.

  • Как написать сценарий Bash для автоматической настройки разрешения экрана Просвещения 20, работающего под VirtualBox?
  • В Unix говорят, в чем разница между скриптом оболочки и исполняемым файлом?
  • Выполнение пользовательской функции в вызове find -exec
  • Извлечение строк между специальными символами
  • Как я могу сравнивать разные файлы, не открывая их?
  • Создание переменной с sed в ksh
  • Самый простой способ найти / заменить в файле с помощью списка?
  • Сценарий Bash возвращает «команда не найдена», если вне исходной папки
  • Невозможно конкатенировать пути к файлам, разрешено отклонение
  • Ожидайте в bash скрипт?
  • Использование chown $ USER: $ USER внутри сценария bash
  • Interesting Posts

    Загрузка Linux с USB без перезаписывания Windows

    Как заставить цикл bash закончить, если он запускает x раз в x секунд?

    Простой «киоск» – StartX с одним приложением говорит, что протокол не указан

    Как отлаживать чашки и самбу? LaserJet Professional P1102w не печатает "фильтр не работает"

    Как я могу удалить слово назад в командной строке (bash и zsh)?

    Как дешифровать файлы ecryptfs?

    Как правильно настроить PS1?

    Не удалось установить crontab на OpenSuse

    ksh – вычесть 5 минут из текущего времени

    Расширение физического адреса – как работают виртуальные адреса?

    Запустить независимый процесс

    Как Linux находит правильное расположение программного пакета

    ZFS: импорт zpool – отсутствующее устройство UNAVAIL

    Сценарий оболочки и crontab, чтобы фиксировать размер файла, имя и дату в CSV-файле, а затем отправлять по электронной почте?

    Периодическое время ping на точке доступа малины pi wifi

    Linux и Unix - лучшая ОС в мире.