2017-01-31 12 views
0

フィールドの1つに改行があるファイルがあります。 例: 三行目を参照してください:私は小さなfile.But私のファイルのためにうまく働いたコマンドperl -p00e 's/\n"|//g'を試してみましたperlを使わずにUnixファイルのフィールドで改行を削除する方法

"A"|"USD"|"123"|"AIRPROMOTION"|"EXPIRE" 

"B"|"USD"|"456"|"AIRPROMOTION"|"EXPIRE" 

"C"|"USD"|"789 
"|"AIRPROMOTION"|"EXPIRE"  

は巨大である(〜100メガバイト)と、それは「セグメンテーションフォールト」エラーが発生します。 その他のオプションは何ですか?

+2

あなたは何としたいですか? –

+0

コマンドが正常に機能していますか?垂直バーの前にバックスラッシュはありませんか?改行と二重引用符が削除されましたか?どのような出力を期待していますか? – choroba

+0

私が与えた答えのようにsedを使うと、非常に速くなるはずです –

答えて

-1

私はNotepad ++ Replace関数(\ r \ n \ r \ nを\ r \ nに置き換えます)を使用します。

無料でNotepad ++をダウンロードすれば、非常に便利なアプリケーションであり、多くの用途があります。

[表示]メニューで[シンボルを表示]を選択し、[すべての文字を表示]をオンにします。

押しCNTRL + Hまたは交換する検索メニューをクリックし、選択...オプション タイプを\ rをする\ n個の\ r \ nにどのような検索で:それを交換してくださいに\ rをする\ nの タイプを交換上の クリックしてすべてのボタン。

PS:あなたが提供したテキストはLFだけでなく、\ r \ nであるCRLFです。あなたの方法を試すことができます。 CRLFCRLFを1つのCRLFに置き換えることを忘れないでください。そうしないと、すべてのCRLFが失われ、すべてのテキストが1行に表示されます。

+0

NppはWindowsのエディタで、Linuxでは動作しません。 – Toto

+0

また、メモ帳++を使用して、巨大なファイルを置き換えることはお勧めできません。 –

+0

また、提案はOPの質問に対する回答ではありません。 – mob

1

セグメント違反の理由は、あなたがスラープモードを有効にしているからです。それをしないでください。代わりに、ファイルを1行ずつ読みます。

はその後..ファイルの次の行を格納し、それを行うためのパターンマッチを行います上記のスクリプト$nxt_lineではこの

perl -lne 'my $nxt_line = <>;($nxt_line=~m/^"\|"/)?print "$_$nxt_line":print "$_"' file.txt 

を試してみてください。

0

お試しください!魅力のように動作する必要があります!

sed -e ':a' -e 'N' -e '$!ba' -e 's/\n"/"/g' input_file > output_file 
関連する問題