разделить CSV-файл с помощью awk и сохранить в новые файлы путем переформатирования столбцов - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь узнать AWK У меня есть большой CSV-файл, который мы экспортируем из одной системы и который необходимо импортировать в другую систему.

CSV-файл представляет собой список продуктов:

"Varenr.";"Beskrivelse";"Lagerbeholdning";"M�rke Navn";"Forventet levering";"Varegrp. Nr.";"Varegrp. Navn";"Beskrivelse 2";"Beskrivelse 3";"EAN/UPC";"Bruttov�gt";"Nettov�gt"
"0-761345-00101-4";"Power Apt 90W, 19V /";"0";"Antec";"10-04-2020";"600090";"Tilbeh�r, b�rbare";"0-4.74A";"";"885909627561";"2,00";"0,50"
"0-761345-01142-6";"Gamer GX909 Window Midi Tower";"0";"Antec";"10-04-2020";"998000";"Feeds";"military";"";"5706998724038";"7,82";"7,04"
"0-761345-05552-9";"NeoECO 550C (550W) 80+ Bronze";"0";"Antec";"10-04-2020";"205022";"500-799W";"";"";"5706998878328";"2,00";"1,80"
"0-761345-05652-6";"NeoECO 650C (650W) 80+ Bronze";"0";"Antec";"10-04-2020";"998000";"Feeds";"";"";"";"2,26";"2,03"
"0-761345-06248-0";"1000W ATX 13,5cm High Curent P";"0";"Antec";"10-04-2020";"205023";"800-1000W";"";"";"5711783480815";"2,00";"0,50"
"0-761345-06260-2";"HCP 1300 PLATINUM-EC";"0";"Antec";"10-04-2020";"205023";"800-1000W";"";"";"7613450626022";"2,00";"1,60"
"0-761345-06484-2";"power supply unit 400w";"0";"Antec";"10-04-2020";"460565";"Power Supplies";"ATX Black";"15";"761345064842";"1,73";"1,56"
"0-761345-92025-4";"VSK-3000B-U3/U2 Mini Tower";"0";"Antec";"10-04-2020";"210120";"Minitower";"USB3 Blk";"";"761345920254";"3,73";"3,36"
"0-761345-92033-9";"VSK-3000E-U3 Mini Tower US B3";"0";"Antec";"11-05-2020";"210120";"Minitower";"Black";"";"761345920339";"6,00";"6,00"
"0-761345-92043-8";"VSK-4000E-U3 Mini Tower US";"0";"Antec";"11-05-2020";"210120";"Minitower";"B3 Black retail";"";"761345920438";"5,00";"4,00"
"0-761345-93100-7";"NSK-3100-EC Micro Tower Black";"0";"Antec";"10-04-2020";"210140";"Micro ATX";"";"";"761345931007";"4,00";"3,00"
"0-761345-93534-0";"ASK-3000B-U3 Mini Tower 2xUSB";"0";"Antec";"11-05-2020";"998000";"Feeds";"3.0 Blk";"30";"";"3,65";"3,29"

Файл содержит тысячи строк, и мне нужно разделить файл на отдельные файлы в зависимости от категории в столбце 7

Я до сих пор был в состоянии структурировать это, и оно работает:

awk -F ';' 'NR==1{h=$0; next};!seen[$7]++{f=$7".csv"; print h > f};{f=$7".csv"; print >> f; close(f)}' input.csv

Но это вызывает у меня проблему с именами файлов. Поэтому, прежде чем установить переменную f, мне нужно отформатировать текст для удаления "и заменить пробелы, и /, и _

Я попытался выяснить, как это сделать с помощью sed, но я не могу понять, Как вставить это в awk или если awk имеет аналогичную функцию.

У кого-нибудь есть идеи, как это сделать? И, пожалуйста, я не просто хочу решение. Я хочу понять это: - )

С уважением, Джонас

1 Ответ

0 голосов
/ 07 апреля 2020

Вам не нужны конвейеры в / из sed, когда вы используете awk, и вы определенно никогда не будете вызывать sed из awk. to format the text to remove " and replace spaces, / and , with _ из переменной, которая содержит значение $ 7:

var=$7
gsub(/"/,"",var)
gsub(/[[:space:]/,]/,"_",var)

Попробуйте эту непроверенную настройку к существующему коду:

awk -F ';' '
    NR==1 {h=$0; next}
    { f=$7".csv"; gsub(/"/,"",f); gsub(/[[:space:]/,]/,"_",f) }
    !seen[f]++ { print h > f }
    { print >> f; close(f) }
' input.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...