2017-02-07 7 views
-3

私は巨大なcsvファイルを持っています。約500Mbです。フィールドセパレータはパイプのchar(|)です。いくつかの行に改​​行と改行が含まれています。私はそれらを削除する必要がありますが、私は各行の最後に正当な改行を削除したくありません。私は他の質問に示されているようにsedとtrで試しましたが、私はすべての改行を削除してしまいます。これは私が望むものではありません。bashでは、行末にあるときを除いて、csvファイル内の改行を置き換えます。

サンプル入力(||はいラインは前の行に結合されなければならない):

21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849 
||Yes||vals 
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No| 

マイ試み:任意の助けを

sed -i 's/\r\n//g' myfile.csv 

tr -d '\r' < myfile.csv 

おかげで、ジョー

+3

サンプル入力、期待される出力、およびあなた自身の努力を忘れてしまいました。 – anubhava

+1

そしてどのような行末が「正当な」ものであったかどうか行末は行末である。合法的または違法な行末を囲む特定の文脈がない限り、どの行末が合法であるかどうかは言えません。 –

+0

かなりトリッキーです。改行が先行していてテキストとパイプが続いているとすれば、それは取り除く必要がある改行です。 – user1030520

答えて

1

A csvデータは通常、固定数の列を持ちます。

あなたのケースでは、完全なレコードが25列あるようです。それに基づいて、このawkコマンドを使用して壊れたレコードを結合することができます:

awk -F '|' 'NF < 25 {getline s; $0 = $0 s} 1' file 

21/06/2016 18:06:32|||||||||||||||||||32 Red|Jrup Vej 6|61069849||Yes||vals 
21/06/2016 18:06:32|||||||||||||||||||101 K|Ser Bevard 110|||No| 
+1

ありがとう@anubhava、これはうまくトリックを行います! – user1030520

関連する問題