2016-10-28 15 views
1

私はこのようになり、非常に大きなCSVファイル、input.csv、持っている:AWK:フィールドにファイル名を異なる使用して分割ファイル

https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 

を私は内容(すべて列)のを保存しようとしていますこのファイルは、最初の列のURLに基​​づいて別々のファイルに格納されます。

したがって、上記のスニペットの出力は二つのファイルのようになります。最初の列に基づいて、このファイルを分割するには

https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 

https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 

、私はこのようにawkのを使用しています:

awk -F, '{print >> ($1".csv")}' input.csv

ただし、ファイルベースに保存できませんこのエラーのためURLフィールド上編:ファイル名としてURL形式の文字列を使用してファイルを保存する

awk: cmd. line:1: (FILENAME=input.csv FNR=1) fatal: can't redirect to ` https://www.youtube.com/watch?v=9t5V_sMVN5I.csv' (No such file or directory) 

は明らかにいくつかのエラーの原因となっています。多くの '/'がファイルパスの問題を引き起こしているに違いありません。

awkを使用してカラム1($ 1)に基づいて内容を保存する方法はありますか?そのような出力ファイルの名前は、おそらく番号1のようなシーケンスに従います。もう1つの選択肢は、すべてのURLをいくつかの一意の識別子に置き換え、それを分割することですが、私はこれをまだスクリプト化できませんでした。

助けていただけたら幸いです!

+0

@Sundeep perfect!私は、awkコマンドの中にネストされた文字列をどのように分割するか分かりませんでした。私はそれを受け入れることができるようにこれを答えとして追加してください! – AruniRC

答えて

1

最初の列は=が一意の識別子として機能した後の文字列との定期的なフォーマットを持っているので、我々は

ことを使用することができます
awk -F, '{split($1,a,"="); print > (a[2]".csv")}' input.csv 

$ cat b7kKTSVbfdA.csv 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=b7kKTSVbfdA, 0.66, 0.7, 89 

$ cat 9t5V_sMVN5I.csv 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.56, 0.98, 87 
https://www.youtube.com/watch?v=9t5V_sMVN5I, 0.66, 0.7, 89 

参考:

0

あなたのファイル名が「/」文字が含まれているため、このメソッドブローを使用することができます。

awk -F, '{filename=$1;sub(".*=","",filename);print >> (filename".csv")}' input.csv 
関連する問題