2016-07-05 9 views
1

シェルスクリプトでbashで試しているシンプルなテキストファイルがありますが、問題のある行がいくつか残っています。二重引用符で囲まれたキャリッジリターンを削除する

与えられた数のフィールドがあり、フィールドの1つはフリーフォーム入力です。

自由形式のフィールドには、二重引用符で囲んで、削除したいキャリッジリターンがあります。

形式は次のようになります。

"0001","Barker","Bob","Free Form Text Here" 
"0002","Barker","Jane", "Free Form 
Text Here" 

私は運では、次の3つのソリューションを試してみた:

  1. tr '\r\n' '' //は、すべてのキャリッジが
  2. sed –e 's/\".*\n"//g' // doesnのを返す削除
  3. awk -v RS='"[^"]*"' -v ORS= '{gsub(/\n/, " ", RT); print $0 RT}' //コンマのみ返します。

私が間違っている可能性のあるアイデアはありますか?私は解決策として、sedまたはawkを使用すると問題ありません。

+0

ジョブ。 *利用可能なCSVパーサーがある言語(Python、Perl、Rubyなど)を使用してください。 – chepner

答えて

2

それはperlを使用して簡単です:

perl -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file 

"0001","Barker","Bob","Free Form Text Here" 
"0002","Barker","Jane", "Free Form Text Here" 

が変更にインラインでの使用を保存するには:何が間違ってやっていることまではないツールでCSVファイルを解析しようとしている

perl -i -pe 's/(,\h*"[^\n"]*)\n/$1 /g' file 
+1

これは動作します。ありがとうございました! – chipoglesby

+0

これを大きなテキストファイル(+ 6MB)で試したとき、perl関数は2〜4行と同じように動作しません。どのようなアイデアがこれから来るのですか? – chipoglesby

+0

' - ¡'なしで試してファイルに出力を保存する – anubhava

関連する問題