\n
PIPE区切り文字を含む多数のレコードを含むフラットファイルソースが提供され、フィールドの1つがキャリッジリターン(複数行)を受け取り、改行()で始まる問題が発生しました。それでは、\n
ファイルから文字を削除する方法は?
例:
-000123456|1654321|6/12/2002 8:49:20 AM|
tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|
誰でも進行方法を提案できますか?
答え1
\n
すべてのレコードでフィールドがこのフィールドで始まることがわかっている場合は、sed
次のように使用できます。
sed "N;s/|\n/|/"
新しい行を削除します。行区切り文字sed
として使用されるため、まず\n
次の行をすでに処理されている行に接続し、N
プロセスのsed
リンクされた行の間に改行文字を挿入する必要があります。
この問題がランダムに発生する場合(すべてのレコードで発生するわけではありません)、ファイルの内容を解析するためにより強力なツールを使用する必要があります。デフォルトではフィールド数を数える必要があります。または、awk
このトリックをエレガントに実行することもできます。 (私の考えperl
では、それも実行できるようですが、おそらく行きたくありません。)sed
その方向)。
答え2
利用可能なツールはたくさんありますが、sed
これらのツールは次の目的で作成されました。
sed -i 's,\\n,,g' Flatfile
どのように動作するかを示すために、入力した入力と同じ式は次のとおりです。
$ echo '-000123456|1654321|6/12/2002 8:49:20 AM|\n tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|' | sed 's,\\n,,g'
-000123456|1654321|6/12/2002 8:49:20 AM| tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|
ただ文字列を見つけて、\n
長さ0の空の文字列に置き換えます(効果的に削除)。が2つあるため、特別な(改行)意味を失い、2文字で一致することがあります\
。\n