AWK - 将多个头文件拆分成单独的文件?

时间:2017-08-17 13:25:33

标签: awk

我有一个异常结构的文件,我试图根据填充的第一列($ 1)将其拆分为多个文件。基本上它是文件的每个“部分”的标题。

该列没有任何模式,因此random_text_1和random_text_2作为列名,因此我无法使用模式匹配...

示例文件......

random_text_1,col_2,col_3,col_4,col_5
,1,a,"1, a",abc
,2,,"2",abc
,3,c,"3,c",def
random_text2,col_2,col_3,col_4,col_5
,1,x,"2, x",abcdef
,2,,"2",abcdef
,3,y,"3,y",defefg

我想把文件分成'块',即

一个档案就是......

random_text_1,col_2,col_3,col_4,col_5
,1,a,"1, a",abc
,2,,"2",abc
,3,c,"3,c",def

另一个......

random_text2,col_2,col_3,col_4,col_5
,1,x,"2, x",abcdef
,2,,"2",abcdef
,3,y,"3,y",defefg

如果我做了类似这样的事情,它会分割文件,但只会删除“标题”的内容,如果我执行$ 1!=“”它只是在单独的文件中给我标题...

awk 'BEGIN { OFS = ","; FPAT = "([^" OFS "]*)|(\"[^\"]+\")"} $1=="" { print $0 > "output-file" $1 } ' test-file.csv

1 个答案:

答案 0 :(得分:2)

awk -F, '$1!=""{close(out); out="out"++c} {print > out}' file

如果您正在使用gawk,则不需要close(out),因为它会在您需要时处理关闭文件。

输出文件名称赋值out="output-file" $1根据标题行$1命名输出文件,如您所愿,如果您愿意,我无法从您的输入中判断是否会创建是否有独特的文件,我知道上面会这样做。