1

この入力ファイルが与えられた場合:

SectionMarker and some random text here
this is the text in section 1 
this is the text in section 1
this is the text in section 1
etc
SectionMarker and some random text here also
this is the text in section 2 
this is the text in section 2
this is the text in section 2
etc
SectionMarker and some random text too
this is the text in section 3 
this is the text in section 3
this is the text in section 3
etc

awk や sed などを使用して、このファイルを分割するにはどうすればよいですか?

これは私が試したものですが、うまくいきませんでした:

awk -vRS='\SectionMarker[:print:]\n' 'NR==1 {print}' ./data.log 
4

2 に答える 2

0

このワンライナーで仕事をする必要があります:

 awk '{x+=($0~/^SectionMarker/)?1:0}x<2' data.log

テスト

kent$  cat data.log
SectionMarker and some random text here
this is the text in section 1 
this is the text in section 1
this is the text in section 1
etc
SectionMarker and some random text here also
this is the text in section 2 
this is the text in section 2
this is the text in section 2
etc
SectionMarker and some random text too
this is the text in section 3 
this is the text in section 3
this is the text in section 3
etc

kent$  awk '{x+=($0~/^SectionMarker/)?1:0}x<2' data.log
SectionMarker and some random text here
this is the text in section 1 
this is the text in section 1
this is the text in section 1
etc

あなたが実際の問題でいくつのセクションを取得したいのかわかりません。exit;その onliner に配置して、awk がファイル全体を処理しないようにすることができます。

于 2012-07-27T22:16:16.690 に答える
0

awkこれは、読み取りセパレーターを使用する 1 つの方法です。と呼ばれる追加の変数を追加しましたvar。これを使用して、目的の「セクション」を簡単に選択できます。たとえば、 の場合var=2、セクション 2 が印刷されます。すなわち:

awk -v var=2 -v RS='SectionMarker[^\n]*' -v FS='\n' 'NR == var + 1 { for (i=2; i<NF; i++) print $i }' file.txt

プリント:

this is the text in section 2 
this is the text in section 2
this is the text in section 2
etc

HTH

于 2012-07-28T03:33:08.577 に答える