【发布时间】:2020-03-01 21:25:18
【问题描述】:
我已经设法将我的文件名作为附加列添加到我的文件中,但不知道如何去除文件名中不必要的部分并将我想要的部分放入附加列中。
示例文件名
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
我尝试的脚本
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 中是否有一种简洁的方法可以做到这一点,或者我需要使用不同的命令来实现结果吗?感谢任何反馈。
【问题讨论】:
-
使用
split在_上拆分FILENAME。然后在拆分后用逗号和适当的元素打印$0。 -
@KamilCuk 感谢您的反馈。意识到我误认为您为
split命令提议的 awk 拆分。我现在就试试你的建议。 -
@KamilCuk 不幸的是,我似乎无法让 split 命令工作。您能否确认我尝试使用的脚本是否有问题?
cat 20191001_export_format_client_platform.csv | awk '{split(FILENAME,a,"_"); print $0, a[4] a[5] }'我的想法是列出文件,然后通过管道将其拆分FILENAME,然后将文件与print命令合并。但这显然是不合时宜的。 -
但是
awk必须知道文件名。做awk .... 20191001_export_format_client_platform.csv。如果你cat到awk,awk将不知道文件名 - 只会看到这些行。此外,对于逗号,只需连接print $0 "," a[4] "," a[5]。print中的,将替换为OFS。 arg,最后有一个.,我们也需要删除它...
标签: linux csv awk command-line