2016-11-19 15 views
0

大きなテキストファイルがありますが、長い行が=とその後にnewline文字を書き込むことによって複数の行に分割されることがあります。 (KaggleのEnron電子メールデータ)。このようにしても単語が壊れてしまい、データを使って機械学習をしたいので、その中断を取り除きたいと思います。私が見ることができる限り、=\nはこれらのブレークにのみ使用されるので、それらを削除すると、ブレークなしで同じ情報が得られ、何も失われません。sedを使用して空のファイルの文字列結果を削除する

  • trは1文字のみを置き換えるため使用できませんが、置き換える文字は2文字です。
  • 私は無駄にこれまで使用していますsedコマンドは次のとおりです。email_aa_editはエンロンのメールデータの一部である

    sed --in-place --quiet --regexp-extended 's/=\n//g' email_aa_edit

    は(それを分割し、分割を使用)、私の入力ファイルです。しかし、これは空のファイルを生成するだけで、私はなぜそれがわかりません。 Afaik =はそれ自身の特殊文字ではなく、改行は\nでなければなりません。

=\nオカレンスを削除する正しい方法は何ですか?

+0

perl: 'perl -pi -e 's/= \ n //' email_aa_edit' – melpomene

+0

@melpomene興味深いことに、以前はperlを使用しようとして同じ正規表現を使用していたと確信していますが、パラメータが異なっていて動作しませんでした。あなたの仕事は成功しました。 – Zelphir

答えて

2

あなたはラインでsedの作品ラインので、改行文字を削除することはできませんが、あなたは、パターンスペースに次の行を追加する場合それは可能です:

sed ':a;/=$/{N;s/=\n//;ta}' file 

詳細:

:a; # defines a label "a" 
/=$/ { # if the line ends with = 
    N; # append the next line to the pattern space 
    s/=\n//; # replace the =\n 
    ta # jump to label "a" when something is replaced (that's always the case 
     # except if the last line ends with =) 
} 

注:ファイルでWindowsの改行シーケンスを使用している場合は\n\r\nに変更してください。

+0

なぜか分かりませんが、私の入力ファイルは、そのコマンドがまったく効果がないかのように、同じままです。 – Zelphir

+0

@Zelphir:インプレースオプションを追加します(私はスイッチを使わずにコマンドを書いて、より明確にします)。 –

+0

はい、うまくいきました。少なくとも私が把握した後、私のコマンドから '--quiet'オプションを削除する必要があります:) – Zelphir

関連する問題