2017-02-09 38 views
0

我已經搜索了足夠的東西,沒有任何東西適合我。現在已經有2天了,我不得不問這個問題。我正在用Cygwin使用Awk。我的數據是這樣的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 

正如您可以猜到,我想分開這個文件放到基於這是第一個column.It也將是不錯的頭複製到每個文件中心名稱的多個文件。預期產出:

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 

感謝您的時間。

回答

1

所有你需要的是:

awk -F, '{print > $1}' file 

,或者如果你想替換用下劃線的所有空間在文件名:如果你不使用GNU

awk -F, '{f=$1; gsub(/[[:space:]]+/,"_",f); print > f}' file 

AWK,那麼你可能需要關閉()輸出文件,避免出現「打開文件過多」的錯誤。你在cygwin上,所以已經在使用gawk,所以這對你來說不是問題,對於那些可能閱讀它並且不使用gawk的人(get gawk!)。

哦,如果你想在所有輸出文件複製標題行,這可能這樣做(未經測試):

awk -F, 'NR==1{h=$0 ORS} {print h $0 > $1; h=""}' file 

也許這一點,也未經檢驗由於沒有輸入/輸出,以測試對:

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

的OP有控制字符在他的輸入文件,這裏是如何清理它們與awk(爲什麼不與tr嘗試):

$ 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 
相關問題