Cygwin Awk将文件拆分为多个文件,并使用正确的文件名保存

Cygwin Awk将文件拆分为多个文件,并使用正确的文件名保存,awk,split,Awk,Split,我已经找够了,什么都不适合我。已经两天了,我不得不问这个问题。我正在和Cygwin一起使用Awk。我的数据是这样的 Center Name,Account Number,Client Status 2001 - LA Center,xxxx,xxxx,xxxx,xxx 2001 - LA Center,xxxx,xxxx,xxxx,xxx 3005 - SD Center,xxxx,xxxx,xxxx,xxx 3005 - SD Center,xxxx,xxxx,xxxx,xxx 您可以猜到,

我已经找够了,什么都不适合我。已经两天了,我不得不问这个问题。我正在和Cygwin一起使用Awk。我的数据是这样的

Center Name,Account Number,Client Status
2001 - LA Center,xxxx,xxxx,xxxx,xxx
2001 - LA Center,xxxx,xxxx,xxxx,xxx
3005 - SD Center,xxxx,xxxx,xxxx,xxx
3005 - SD Center,xxxx,xxxx,xxxx,xxx
您可以猜到,我正试图根据第一列的中心名将此文件分为多个文件。将标题复制到每个文件也很好。预期产出:

Center Name,Account Number,Client Status
2001 - LA Center,xxxx,xxxx,xxxx,xxx
2001 - LA Center,xxxx,xxxx,xxxx,xxx

Center Name,Account Number,Client Status
3005 - SD Center,xxxx,xxxx,xxxx,xxx
3005 - SD Center,xxxx,xxxx,xxxx,xxx
谢谢您的时间。

您只需要:

awk -F, '{print > $1}' file
或者,如果要用下划线替换文件名中的所有空格:

awk -F, '{f=$1; gsub(/[[:space:]]+/,"_",f); print > f}' file
如果您没有使用GNU awk,那么可能需要关闭()输出文件,以避免出现“打开的文件太多”错误。你在cygwin上,所以已经在使用gawk了,所以这对你来说不是问题,只是对其他可能读到这篇文章但没有使用gawk的人来说(get gawk!)

哦,如果您希望在所有输出文件中复制一个标题行,则可以这样做(未测试):

或者,由于没有可测试的输入/输出,也可能是未测试的:

awk -F, 'NR==1{h=$0; next} !seen[$1]++{print h > $1} {print > $1}' file

OP的输入文件中有控制字符,下面介绍了如何使用
awk
清理这些字符(为什么不使用
tr
):

$cat文件
abc
def
$cat-v文件
a^@b^@c^M
d^@e^@f^M
$tr-d'[:cntrl:][file|cat-v
abcdef$
$awk'{gsub(/[:cntrl:]/,“”)}1'文件| cat-v
abc
def
awk -F, 'NR==1{h=$0; next} !seen[$1]++{print h > $1} {print > $1}' file
$ cat file
abc
def

$ cat -v file
a^@b^@c^M
d^@e^@f^M

$ tr -d '[:cntrl:]' < file | cat -v
abcdef$

$ awk '{gsub(/[[:cntrl:]]/,"")}1' file | cat -v
abc
def