基于分隔符数量拆分格式错误CSV文件的Unix命令求解
问题
我有一个格式错误的CSV文件,每行的逗号(分隔符)数量不一致。需要用Unix命令将源文件按每行的分隔符数量拆分为多个文件。
输入示例
$ cat ~/Desktop/sample_file.csv 1001,Pink,Panther,Seattle,WA,98001,favorite character 1002,Micky,Mouse,Bellevue,WA,98002 1003,Mini,Mouse,Bellevue,WA,98003 1004,Donald,Duck,Redmond,WA,98004,So funny 1005,Tom,Jerry,Lynwood,WA 1006,Woody,Woodpacker,Lynwood,WA
期望输出
拆分后得到3个文件,内容分别如下:
$ cat sample_file_6_delimiter.csv 1001,Pink,Panther,Seattle,WA,98001,favorite character 1004,Donald,Duck,Redmond,WA,98004,So funny
$ cat sample_file_5_delimiter.csv 1002,Micky,Mouse,Bellevue,WA,98002 1003,Mini,Mouse,Bellevue,WA,98003
$ cat sample_file_4_delimiter.csv 1005,Tom,Jerry,Lynwood,WA 1006,Woody,Woodpacker,Lynwood,WA
解决方案
用下面的awk命令就能实现需求:
awk -F, '{print > "sample_file_" (NF-1) "_delimiter.csv"}' ~/Desktop/sample_file.csv
命令解释
-F,:指定逗号作为字段分隔符NF:awk的内置变量,代表当前行的字段总数,字段数减1就是该行的逗号数量(比如7个字段对应6个逗号)print > "filename":将当前行写入对应名称的文件,文件名自动按sample_file_<逗号数>_delimiter.csv的格式生成
执行这条命令后,就会自动生成符合要求的三个文件,每行根据自身的逗号数量被归类到对应文件中。
内容的提问来源于stack exchange,提问作者BeginnerDeveloper
相关产品推荐
相关产品推荐

