2017-02-09 8 views
0

私は十分に検索して何も役に立たない。その2日後、私はこの質問をしなければなりません。私はCygwinでAwkを使用しています。私のデータは、あなたが推測できるように、私が最初にcolumn.Itあるセンター名に基づいて複数のファイルにこのファイルを分離しようとしていますが、各ファイルにヘッダをコピーすることもいいだろう。この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 

ありがとうございます。

答えて

1

必要なのは、次のとおりです。

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

またはファイル名にアンダースコアですべてのスペースを置き換える場合:

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

あなたはGNU AWKを使用していないなら、あなたは必要な場合があります「開いているファイルが多すぎます」というエラーを避けるために、出力ファイルをclose()します。あなたはcygwin上にあり、gawkを使っていますので、これはあなたにとって問題ではなく、これを読んでgawkを使用していない人たちのためだけです(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 
関連する問題