使用csv文件的文件名部分创建2个新列

我设法解决了如何将文件名作为附加列添加到文件中的问题,但是无法解决如何去除文件名中不必要的部分并将所需的部分放入其他列中的问题。

示例文件名

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,411751188
30/09/2019 00:14,411511576
30/09/2019 00:14,411751576
30/09/2019 00:14,411751170
30/09/2019 00:14,411751152

我尝试的脚本

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

我的尝试输出

visitor_date,id3,20191001_export_format_client_platform.csv
30/09/2019 00:00,411751188,20191001_export_format_client_platform.csv
30/09/2019 00:14,411511576,411751576,411751170,411751152,20191001_export_format_client_platform.csv

所需的输出

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

所以从文件名中,我应该只使用文件名的粗体部分:20191001_export_format_ 客户端 _ 平台 .csv,然后应成为2个新列

awk内是否有一种整齐的方法来执行此操作,还是需要使用其他命令来获得结果?感谢任何反馈。

lcy0851 回答:使用csv文件的文件名部分创建2个新列

那将是:

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,411751188
30/09/2019 00:14,411511576
30/09/2019 00:14,411751576
30/09/2019 00:14,411751170
30/09/2019 00:14,411751152
EOF

它将输出:

visitor_date,id3,client,platform
30/09/2019 00:00,411751188,platform
30/09/2019 00:14,411511576,411751576,411751170,411751152,platform
,

我会写

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

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

        if (out) close(out)
        out = f "-out.csv"
    }
    { print $0,platform > out }
' *.csv
本文链接:https://www.f2er.com/3159233.html

大家都在问