2012-01-11 9 views
0

に応じて、私は次のレコードを持つ大規模なCSVファイルを持っている:のLinux - スプリットCSV条件

60,1572236,3,58394247,\N,\N,\N,1925720,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
61,2875109,4,58394209,1234,\N,4025175,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
62,2875109,4,58394209,\N,\N,\N,9860904,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
63,2875109,5,58394209,8756,\N,\N,8615157,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
64,2686696,3,58394211,\N,\N,59512,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 
65,2686696,3,58394211,\N,\N,4025893,\N,\N,2011-11-25 12:55:53,2011-11-25 12:55:53 

を私は2のファイルにファイルを分割したいが、分割のための条件は、第五の値になります1つのファイルはその列(\ N)に値のない行を取得し、その列の値を持つ列は別のファイルに移動します。

上記の例では、行2,4は1つのファイルに移動し、残りの行は別のファイルに移動します。

どのようにLinuxでこれを行うには?

あなたが awkを使用することができます
+0

私は、これは、Linuxのコマンドの使用に関するご質問にお答えしていないことを知っているが含まれています。しかし、あなたがそれを勉強する時間があるなら、Rを見てみることをお勧めします。CSVファイルをデータフレームとしてインポートすることができます。そして、あなたが定義したルール(プログラミング言語の条件式と同じです)に従って、元のものから他のデータフレームを生成することができます。その後、それらをCSVファイルとしてエクスポートできます。 – dgraziotin

+0

'grep'を使って最初の条件を正規表現でマッチさせ、' cut -d、-f2,4'を使って2番目と4番目のカラムを新しいファイルに抽出することができます。 –

+0

私のファイルは70M以上の行を持っています私はちょうどデータがどのように見えるかを見ることができるように、私はビュー行を追加しました。 – Ran

答えて

0

$ awk -F, '$5=="\\N"{print >"file1.csv"; next}; {print >"file2.csv"}' data.csv 
  • file1.csv意志が含まれてい\N
  • file2.csv意志が他人