Замена запятой, если она обнаружена внутри двойных кавычек в CSV-файле с помощью sed

Если теги EXIF ​​в изображениях верны, вы можете использовать exiftool, чтобы изменить дату модификации файла на дату, заданную тегами, а затем использовать поиск, чтобы удалить старые.

0
30.03.2020, 03:42
3 ответа

Как уже упоминал @steeldriver, mysqlвероятно, знает, как справиться с этим, если использовать правильные параметры , но FWIW вы можете сделать это с помощью awk:

awk -v RS='"' -v ORS= 'NR % 2 || gsub(/,/,";") || 1'

12,name; brand - something; something,age,sex,,,,name; brand - something; something; something,,,,,

Или, сохраняя кавычки:

awk -v RS='"' -v ORS= '{if(NR % 2) print; else{gsub(/,/,";");print RS $0 RS}}'

12,"name; brand - something; something",age,sex,,,,"name; brand - something; something; something",,,,,

Здесь используется тот же трюк, что и здесь , только возвращено :вместо изменения части вне кавычек, я изменяю часть внутри кавычки.

0
19.03.2021, 02:31

CSV-файлы могут быть очень сложными. Вы можете получить экранированную кавычку где-то в строке и регулярное выражение для обработки, которое будет нечитаемым и подверженным ошибкам.

Я бы предложил либо такой инструмент, как cvskit , либо небольшой скрипт на Perl или Python. Эта быстро созданная программа на питоне должна это делать:

import csv

with open('input.csv',mode='r') as csv_file:
   csv_reader = csv.reader(csv_file)
   for row in csv_reader:
       print (',').join([f.replace(',',';') for f in row])
0
19.03.2021, 02:31

Лучший ответ, который я нашел, это использовать саму MySQL, добавив строку:

OPTIONALLY ENCLOSED BY '"'

Так, например, запрос на загрузку выглядит так:

LOAD DATA INFILE 'filename.csv' INTO TABLE table_name 
  FIELDS TERMINATED BY ',' 
  OPTIONALLY ENCLOSED BY '"'
  IGNORE 1 LINES;
0
19.03.2021, 02:31

Теги

Похожие вопросы