2016-05-12 5 views
0

で得られる各ファイルに名前を付け、私が使用してファイルを持っているが、この分割パターンを使用してファイルと、このパターンを含む文字列(perlの)

PATTERN1abcdef_abcd_ab 
a 
b 
PATTERN2azerty_az_aze 
c 
d 

と、私はこれらのような小さなファイルに分割する必要があるようなものです

PATTERN1abcdef_abcd_ab 
a 
b 

とPATTERN2azerty_az_aze.txtは、ウィッヒは含まれています:.TXT、ウィッヒは含まれてい

PATTERN2azerty_az_aze 
c 
d 
それはパターンを含む文字列を出力ファイルの名前を変更しません除い

perl -n -e '/^PATTERN/ and open FH, ">output_".$n++; print FH;' inputfile.txt 

は、私が正常に動作して、このperlのコマンドを見つけました。

EDIT:申し訳ありませんが、私は間違いを犯しました.PATTERNを含む文字列を出力テキストファイルから削除してはならず、ファイル名にする必要があります。

答えて

0

はこれを試してみてください:

perl -n -e '/^PATTERN.*/ and open FH, "$&.txt"; print FH;' inputfile.txt 
+0

ご協力いただきありがとうございます。 このコマンドは、大きなファイルで数秒間実行されますが、何も生成されません。私はinputfile.txtサンプルファイルでは動作しません。 – user6327116

+0

Haはい!ごめんなさい !完璧に動作します! 2つありがとうございました。 – user6327116

0

あなたは(あなたのパターンに一致すなわち) PATTERN1という名前のファイルに入れて取得するための値を取得しようとしている場合。 それからあなたの正規表現で名前を取得し、あなたのファイル名の一部としてそれを使用したいと思うでしょう。

perl -n -e '/^(PATTERN\d)/ and open(FH, "> $1.txt")and next; print FH;' inputfile.txt 

注意:私は()内のパターンをキャプチャしており、$ 1は私たちのマッチの値を保持します。私はまた、ファイルの後に次のファイルを追加しました。そうでなければ、ファイル内にもマッチが含まれます。

+0

ご協力ありがとうございます! perl -n -e '/ ^(PATTERN \ d)/ open(FH、 "> $ 1.txt")およびnext;プリントFH; input.txt がしばらく実行されていますが(input.txtは1 Goです)、何も生成しません。 PATTERN1.txtの最初の行にPATTERN1を保存したいので、あなたのメッセージから理解したように 'and next'を削除しましたが、どちらも動作しません: perl -n -e '/ ^(PATTERN \ d)/ open(FH、 "> $ 1.txt");プリントFH; input.txt – user6327116

+0

申し訳ありませんが、あなたのコマンドはinput.txtサンプルファイルで動作しますが、今のところ私の1Goテキストファイルでは動作しません。やってる。 私はそれが動作しない理由を知った。実際には私のパターンラインはPATTERNpsks1225sである可能性があります 文字列の長さは可変で、文字、数字、_ – user6327116

+0

を含むことができますので、あなたのパターンは/^PATTERN \ w + /になります。 – cberning

関連する問題