2

ファイルから改行文字を選択的に削除する方法を見つけようとしています。それらをすべて削除しても問題はありませんが、いくつかは残す必要があります。

以下は、不適切な入力ファイルの例です。許可 ID COO789 & COO012 の行には、削除する必要がある説明フィールドに改行が埋め込まれていることに注意してください。

"Permit Id","Permit Name","Description","Start Date","End Date"
"COO123","Music Festival",,"02/12/2013","02/12/2013"
"COO456","Race Weekend",,"02/23/2013","02/23/2013"
"COO789","Basketball Final 8 Championships - Media vs. Politicians
Skills Competition",,"02/22/2013","02/22/2013"
"COO012","Dragonboat race 
weekend",,"05/11/2013","05/11/2013"

ファイルを次のようにする必要がある方法の例を次に示します。

"Permit Number/Id","Permit Name","Description","Start Date","End Date"
"COO123","Music Festival",,"02/12/2013","02/12/2013"
"COO456","Race Weekend",,"02/23/2013","02/23/2013"
"COO789","Basketball Final 8 Championships - Media vs. Politicians Skills Competition",,"02/22/2013","02/22/2013"
"COO012","Dragonboat race weekend",,"05/11/2013","05/11/2013"

注: 余分な列をいくつか削除して、ファイルを単純化しました。ただし、ロジックは任意の数の列に対応できる必要があります。実際の完全なヘッダー行には、すべての列があります。技術的には、「余分な」改行が説明と場所の列にあると思います。

"Permit Number/Id","Permit Name","Description","Start Date","End Date","Custom Status","Owner Name","Total Expected Attendance","Location"

私はsed、cut、tr、nawkなどを試しました.これを実行できる任意のソリューションに開かれています..UNIXスクリプト内から呼び出すことができます。

ありがとう!!!

4

2 に答える 2

1

「説明」フィールドと「場所」フィールドからのみ改行文字を削除する必要がある場合は、適切な csv パーサーが必要になります (Text::CSV を考えてください)。を使用してこれをかなり簡単に行うこともできますが、残念ながら Solaris ではGNU awkアクセスできません。gawkしたがって、次善の策は、二重引用符で始まらない行を前の行に結合することです。を使用してこれを行うことができますsed。互換性を念頭に置いてこれを書きました:

sed -e :a -e '$!N; s/ *\n\([^"]\)/ \1/; ta' -e 'P;D' file

結果:

"Permit Id","Permit Name","Description","Start Date","End Date"
"COO123","Music Festival",,"02/12/2013","02/12/2013"
"COO456","Race Weekend",,"02/23/2013","02/23/2013"
"COO789","Basketball Final 8 Championships - Media vs. Politicians Skills Competition",,"02/22/2013","02/22/2013"
"COO012","Dragonboat race weekend",,"05/11/2013","05/11/2013"
于 2013-02-12T16:03:52.877 に答える
0
sed ':a;N;$!ba;s/ \n/ /g'

ファイル全体をパターン スペースに読み込み、スペースの直後にあるすべての改行を削除します - すべての誤った改行がこのパターンに適合すると仮定します。そうでない場合、他にいつ改行を削除する必要がありますか?

于 2013-02-12T14:49:49.400 に答える