Использование sed для удаления разделителей цифр, заключенных в кавычки и кавычки из CSV?

Как я могу использовать sed для удаления из последнего столбца цифры запятой цифры цифры и цитаты?

Обратите внимание, что в приведенном ниже примере целевой столбец не содержится в двойных кавычках.

0,1,,,"10,815,197", 6,7,010202,,"5,589", 6,7,010202,,589, 

Результатом исследования будет:

 0,1,,,10815197, 6,7,010202,,5589, 6,7,010202,,589, 

  • Эквивалент grep для awk или sed
  • Как я могу удалить все между двумя маркерами в файле?
  • Как добавить другой префикс для каждой строки в grep-выходе?
  • размещение кавычки после поиска строки
  • Sanitize файлы журнала доступа Apache?
  • Как извлечь несколько данных из файла и сохранить его в файле csv?
  • grep: отображать имя файла один раз, затем отображать контекст с номерами строк
  • Как использовать + в регулярном выражении в sed?
  • 3 Solutions collect form web for “Использование sed для удаления разделителей цифр, заключенных в кавычки и кавычки из CSV?”

    Awk будет лучшим для вашего сценария.

     $ awk -F'"' '{gsub(",", "", $2);print}' file.txt 0,1,,, 10815197 , 6,7,010202,, 5589 , 6,7,010202,,589, 

    Как это работает

    -F'"' – заставляет AWK использовать двойные кавычки (") в качестве разделителя записей.

    gsub(",","",$2) – Функция gsub будет искать и заменять все вхождения двойных кавычек пустой строкой.

    print – печатает измененный контент на выходе.

    Я думаю, что с awk проще. Вы можете попробовать что-то вроде этого:

     $ awk -vv='"' 'BEGIN{FS=OFS=v}{gsub(",","",$2);gsub("\"","",$0);print }' file.txt 0,1,,,10815197, 6,7,010202,,5589, 6,7,010202,,589, 
    • В основном вы говорите awk которые используют регулярное выражение -vv='"' чтобы использовать его как разделитель полей.
    • С FS=OFS=v вы говорите, что разделитель полей такой же, как разделитель выходного поля, который является " .
    • gsub (",","",$2) заменяют ничто во втором поле $2 (с разделителем в начале и в конце с " ).
    • gsub("\"","",$0) берет всю строку и заменяет " ничем перед распечаткой строки.

    sed не подходит для этого.

     $ perl -pe 's|"([\d,]+)"(?=[^"]*$)|$1=~y/,//dr|eg' file 0,1,,,10815197, 6,7,010202,,5589, 6,7,010202,,589, 

    Через Python.

     #!/usr/bin/python3 import sys import re file = sys.argv[1] with open(file, 'r') as f: for line in f: print(re.sub(r'"([\d,]+)"(?=[^"]*$)', lambda m: m.group(1).replace(',', ''), line), end = "") 

    Сохраните приведенный выше сценарий в файле, скажем, script.py и запустите, затем запустите sript, выполнив команду ниже на терминале.

     $ python3 script.py inputfile 
    Interesting Posts

    ssh-туннелирование: соединение закрыто иностранным хостом

    -o в iptables для указания интерфейса для OUTPUT, FORWARD и POSTROUTING? Правильно?

    Является ли data = journal безопаснее для Ext4 в отличие от данных = упорядочен?

    vimdiff отключить / включить цветное кодирование

    Сделать ping на linux вести себя как ping на Mac OSX

    Почему системы UNIX / POSIX называют так называемые namings?

    Существует ли неявное преобразование пути в Cygwin?

    Простой скрипт BASH, обрабатывающий флаги как команды

    Перенаправление stdout и stderr определенных строк

    Как мне узнать, что такое моя модель и модель моего компьютера?

    Раздельный / домашний раздел для архивных дистрибутивов занимает больше места, чем используется

    Является ли запуск приложений GUI на сервере проблемой безопасности?

    Извлечение / установка TAR-файла

    Какая стандартная команда оболочки может оценивать escape-код Unicode в потоке?

    Как отключить спам в журнале systemd «Время было изменено» при использовании sdwdate?

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