Использование 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, 

  • Есть ли способ использовать sed или awk для фильтрации данных внутри заархивированного файла?
  • Сравнивая File1 и File2, чтобы прокомментировать соответствующий шаблон в File2
  • Заменить только в определенной строке диапазона
  • Регулярные команды и команды с командой sed
  • Использование sed для удаления строки или абзаца между разделителем
  • заменить строку в цикле
  • Что значит . совпадение?
  • мы можем напечатать последнее слово каждой строки в linux с помощью команды 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 
    Linux и Unix - лучшая ОС в мире.