我有一个非常大的CSV文件input.csv
,如下所示:
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
我正在尝试根据第一列中的网址将此文件的内容(所有列)保存到单独的文件中。
因此上述代码段的输出应该是两个文件:
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
和
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
要根据第一列拆分此文件,我使用的是awk:
awk -F, '{print >> ($1".csv")}' input.csv
但是,由于此错误,我无法保存到基于URL字段的任何文件:
awk: cmd. line:1: (FILENAME=input.csv FNR=1) fatal: can't redirect to ` https://www.youtube.com/watch?v=9t5V_sMVN5I.csv' (No such file or directory)
使用URL样式字符串作为文件名保存文件显然会导致一些错误。许多'/'必须导致文件路径中的问题。
有没有办法使用awk基于第1列($ 1)保存内容,但这样的输出文件命名不同,可能遵循编号为1..N的序列?另一个选择是用一些唯一标识符替换每个URL然后拆分 - 但是我还没有能够编写这个脚本。
任何帮助将不胜感激!
答案 0 :(得分:1)
由于第一列的常规格式是=
作为唯一标识符后的字符串,我们可以使用
awk -F, '{split($1,a,"="); print > (a[2]".csv")}' input.csv
$ cat b7kKTSVbfdA.csv
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89
$ cat 9t5V_sMVN5I.csv
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89
参考:
答案 1 :(得分:0)
因为您的文件名包含' /'性格,你可以使用这种方法打击:
awk -F, '{filename=$1;sub(".*=","",filename);print >> (filename".csv")}' input.csv