Создайте 2 новых столбца, используя части имени файла для файла CSV - PullRequest
0 голосов
/ 05 ноября 2019

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

Пример имен файлов

20191001_export_format_client_platform.csv
20191002_export_format_client_platform.csv
20190928_export_format_client_platform.csv

часть export_format остается одинаковой во всех файлах. Единственное, что меняется, это дата в начале имени, имя клиента и название его платформы

Входные данные CSV

visitor_date,browser,id1,id2,id3
30/09/2019 00:00,69246,216370,411751188
30/09/2019 00:00,69247,216370,411751188
30/09/2019 00:14,69246,216370,411511576
30/09/2019 00:14,69246,216370,411751576
30/09/2019 00:14,69246,216370,411751170
30/09/2019 00:14,69246,216370,411751152

MyПопытка сценария

awk '{ print $0 FILENAME }' *.csv > *.csv

Моя попытка вывода

visitor_date,id1,id2,id3,20191001_export_format_client_platform.csv
30/09/2019 00:00,69246,216370,411751188,20191001_export_format_client_platform.csv
30/09/2019 00:00,69247,216370,411751188,20191001_export_format_client_platform.csv
30/09/2019 00:14,69246,216370,411511576,20191001_export_format_client_platform.csv
30/09/2019 00:14,69246,216370,411751576,20191001_export_format_client_platform.csv
30/09/2019 00:14,69246,216370,411751170,20191001_export_format_client_platform.csv
30/09/2019 00:14,69246,216370,411751152,20191001_export_format_client_platform.csv

Требуемый вывод

visitor_date,id1,id2,id3,client,platform
30/09/2019 00:00,692467,2163703,4117511887,client,platform
30/09/2019 00:00,692467,2163703,4117511887,client,platform
30/09/2019 00:14,692467,2163703,4117511576,client,platform
30/09/2019 00:14,692467,2163703,4117511576,client,platform
30/09/2019 00:14,692467,2163703,4117511780,client,platform
30/09/2019 00:14,692467,2163704,4117511528,client,platform

Итакиз имени файла я должен взять только выделенные жирным шрифтом части имени файла: 20191001_export_format_ client _ platform .csv, которые затем должны стать 2 новыми столбцами

Есть лиаккуратный способ сделать это в awk или мне нужно будет использовать другую команду для достижения результата? Ценю любые отзывы.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

я бы написал

awk '
    BEGIN { FS = OFS = "," }
    FNR == 1 {
        f = FILENAME
        sub(/\.csv$/, "", f)
        n = split(f, a, /_/)

        client = a[n-1]
        platform = a[n]

        if (out) close(out)
        out = f "-out.csv"
    }
    { print $0, client, platform > out }
' *.csv
0 голосов
/ 05 ноября 2019

Это было бы что-то вместе:

awk '{ split(FILENAME, a, "_"); split(a[5], b, ".");  print $0 "," a[4] "," b[1] }' 20191001_export_format_client_platform.csv

Для ввода:

cat <<EOF >20191001_export_format_client_platform.csv
visitor_date,browser,id1,id2,id3
30/09/2019 00:00,69246,216370,411751188
30/09/2019 00:00,69247,216370,411751188
30/09/2019 00:14,69246,216370,411511576
30/09/2019 00:14,69246,216370,411751576
30/09/2019 00:14,69246,216370,411751170
30/09/2019 00:14,69246,216370,411751152
EOF

Будет выведено:

visitor_date,browser,id1,id2,id3,client,platform
30/09/2019 00:00,69246,216370,411751188,client,platform
30/09/2019 00:00,69247,216370,411751188,client,platform
30/09/2019 00:14,69246,216370,411511576,client,platform
30/09/2019 00:14,69246,216370,411751576,client,platform
30/09/2019 00:14,69246,216370,411751170,client,platform
30/09/2019 00:14,69246,216370,411751152,client,platform
...