Как изменить разделитель файла CSV - PullRequest
0 голосов
/ 05 августа 2020

Мне нужно изменить разделитель файла csv с запятой (,) на символ трубы (|).

Примечание. Здесь разделитель файлов также находится внутри строки данных. Мне нужно пропустить это значение. Я попробовал одну команду, но он также меняет инсайдерскую запятую awk '$1=$1' FS="," OFS=":" Sample.csv (я пробовал это, но не давал ожидаемого результата)

Input> Sample.csv

Col1, Col2, Col3 , Col4
101, XYZ, 2020 , "Hello, World"
102, PQR, 2021, "Help, Me"

Выход> Sample_Out.csv должен быть похож на.

Col1| Col2| Col3|Col4
101 | XYZ | 2020 | "Hello, World"
102 | PQR |2021 | "Help, Me"

Ответы [ 3 ]

0 голосов
/ 05 августа 2020

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

awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "§", $i) } 1' Sample.csv

Затем вы можете изменить оставшиеся запятые на все, что захотите:

awk '$1=$1' FS="," OFS=":" Sample.csv

И вы замените § на запятые перед ним

awk '$1=$1' FS="§" OFS="," Sample.csv

Думаю, можно сделать awk-файл и поместить в него все шаги.

0 голосов
/ 05 августа 2020

Попробуйте это, требуется специальная обработка двойных кавычек, поэтому разделите поля с ним, обработайте альтернативное поле и замените запятую на конвейер.

awk '{for(i=1; i<=NF; i+=2) gsub(",","|",$i)}1' FS=\" OFS=\" Sample.csv

Вывод:

Col1| Col2| Col3 | Col4
101| XYZ| 2020 | "Hello, World"
102| PQR| 2021| "Help, Me"
0 голосов
/ 05 августа 2020

awk предназначен для обработки необработанного текста и поэтому не может обрабатывать запятые в кавычках. Вместо этого вы должны использовать инструменты, разработанные для csv, например csvtool:

csvtool -u \| -t , cat Sample.csv > Sample_Out.csv

From csvtool do c:

-t Входной разделитель char.

-u Символ-разделитель вывода.

cat

Это объединяет входные файлы вместе и записывает их в выходные данные. Вы можете использовать это, чтобы изменить символ-разделитель.

 Example: csvtool -t TAB -u COMMA cat input.tsv > output.csv

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...