Преобразование файла CSV в многострочный текстовый файл - PullRequest
0 голосов
/ 28 мая 2019

У меня есть файл, который выглядит следующим образом:

C_DocType_ID,SOReference,DocumentNo,ProductValue,Quantity,LineDescription,C_Tax_ID,TaxAmt

1000000,1904093563U, 1904093563U, 5210-1,1,0,1000000,0 1000000,1904093563U, 1904093563U, 6511,2,0,1000000, 0 1000000,1904093563U, 1904093563U, 5001,1,0,1000000,0 1000000,1904083291U, 1904083291U, 5310,4,0,1000000,0 1000000,1904083291U, 1904083291U, 5311,3,0,1000000,0 1000000,1904083291U, 1904083291U, 6101,6,0,1000000,0 1000000,1904083291U, 1904083291U, 6102,1,0,1000000,0 1000000,1904083291U, 1904083291U, 6106,6,0,1000000,0

Мне нужночтобы преобразовать его в текстовый файл, который выглядит следующим образом:

WOH~1.0~~1904093563Utest~~~ORD~~~~
WOL~~~5210-1~~~~~~~~1~~~~~~~~~~~~~~~~~~~~~
WOL~~~6511~~~~~~~~2~~~~~~~~~~~~~~~~~~~~~
WOL~~~5001~~~~~~~~1~~~~~~~~~~~~~~~~~~~~~

WOH~1.0~~1904083291Utest~~~ORD~~~~~~
WOL~~~5310~~~~~~~~4~~~~~~~~~~~~~~~~~~~~~
WOL~~~5311~~~~~~~~3~~~~~~~~~~~~~~~~~~~~~
WOL~~~6101~~~~~~~~6~~~~~~~~~~~~~~~~~~~~~
WOL~~~6102~~~~~~~~1~~~~~~~~~~~~~~~~~~~~~
WOL~~~6106~~~~~~~~6~~~~~~~~~~~~~~~~~~~~~

В выходном файле есть запись заголовка и запись отдельной позиции.Запись заголовка содержит SOReference и некоторые жестко заданные поля, а запись позиции содержит значение продукта и количество, связанные с этим SOReference.Во входном файле у нас есть 2 уникальных SOReferences, поэтому выходной файл содержит 2 записи заголовка и связанную с ними запись отдельных позиций.

Нужно что-то сделать в командной строке (awk / sed)?так как у меня есть ряд таких файлов, которые нужно преобразовать в текст.

1 Ответ

1 голос
/ 28 мая 2019

С AWK, пожалуйста, попробуйте следующее:

awk -F, '
FNR==1 {next}       # skip the header line
{
    if ($2 != prevcol2) {           # insert newline when SOReference changes
        nl = FNR<=2 ? "" : "\n"     # suppress the newline in the 1st line
        printf("%sWOH~1.0~~%stest~~~ORD~~~~\n", nl, $2)
    }
    printf("WOL~~~%s~~~~~~~~%s~~~~~~~~~~~~~~~~~~~~~\n", $4, $5)
    prevcol2 = $2
}' file.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...