新しいファイルに行を抽出する

新しいファイルに行を抽出する

ヘッダーと複数の列を含む大きなCSVファイルがあるとします。この質問の目的のために、2つの列しかない小さなファイルを考えてみましょう。私たちはこれをこう呼ぶことができますuse_rep

user_id,rep
885,500K+
22565,200K+
7453,200K+
86440,100K+
116858,100K+
22222,100K+
38906,100K+
10762,<100K
70524,<100K

各行を2番目の列の値に対応するファイルに送信したいと思います。たとえば、次のような名前200K+と内容を含むファイルがあります。

user_id,rep
22565,200K+
7453,200K+

use_repいずれにせよ、コンテンツが注文されたと仮定してはいけません。理想的には、使用したいパターンは正規表現を受け入れます。

sedやperlは推奨されません。

ベストアンサー1

ヘッダーを無視します(後で追加できます)。

awk -F, 'NR > 1 {print > $2}' use_rep

2番目の列の名前付きファイルに各行を印刷します。

~ head *[0-9]*
==> 100K+ <==
86440,100K+
116858,100K+
22222,100K+
38906,100K+

==> 200K+ <==
22565,200K+
7453,200K+

==> 500K+ <==
885,500K+

==> <100K <==
10762,<100K

タイトルを指定するには、次のように表示できます。

awk -F, 'NR == 1 {header = $0; next} # save header, skip this line
  !a[$2]++ { print header > $2 } # print if second field hasnt been seen before 
  { print > $2 }' use_rep

結果:

~ head *[0-9]*
==> 100K+ <==
user_id,rep
86440,100K+
116858,100K+
22222,100K+
38906,100K+

==> 200K+ <==
user_id,rep
22565,200K+
7453,200K+

==> 500K+ <==
user_id,rep
885,500K+

==> <100K <==
user_id,rep
10762,<100K
70524,<100K

おすすめ記事