Bash awk:使用与字段不同的文件名拆分文件

Bash awk:使用与字段不同的文件名拆分文件,bash,csv,awk,Bash,Csv,Awk,我有一个非常大的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=b7kKTSVb

我有一个非常大的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
我正试图根据第一列中的URL将此文件的内容(所有列)保存到单独的文件中

因此,上述代码段的输出应该是两个文件:

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

要基于第一列拆分此文件,我使用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,然后在此基础上进行拆分——但我还无法编写脚本


任何帮助都将不胜感激

由于文件名包含“/”字符,因此可以使用以下方法:

awk -F, '{filename=$1;sub(".*=","",filename);print >> (filename".csv")}' input.csv   

由于第一列具有规则格式,且
=
之后的字符串用作唯一标识符,因此我们可以使用它

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
参考:


@Sundeep完美无瑕!我不知道如何分割嵌套在awk命令中的字符串。请添加此作为答案,以便我可以接受!
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