事前および事後条件を使用した段落ベースの検索 UNIX KSH

事前および事後条件を使用した段落ベースの検索 UNIX KSH

次のファイルがあります。

<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>
After
Address1
Address2
Address3
Before
<Set of long paragraphs here>
<Set of long paragraphs here>
<Set of long paragraphs here>

After単語間の行を別々のBefore出力ファイルに書き込む必要があります。たとえば、出力ファイルは次のようになります。

Line Number : Address1
Line Number : Address2
Line Number : Address3
......................
......................

私はこれを試しました:

awk '/After/,/Before/' Details.txt>output.txt

しかし、それはうまくいきませんでした。どうすればいいですか?

ベストアンサー1

次のように試すことができます。

$ awk '/After/{a=1;next}/Before/{a=0}; (a==1){print NR" : "$0}' file 
5 : Address1
6 : Address2
7 : Address3
13 : Address1
14 : Address2
15 : Address3
21 : Address1
22 : Address2
23 : Address3
29 : Address1
30 : Address2
31 : Address3
37 : Address1
38 : Address2
39 : Address3

アイデアは簡単です。a現在の行がAfteror と一致すると、変数の値が変更され、Before1 と等しい場合にのみ行が印刷されます。a

別の出力ファイルに保存するには、次のようにします。

awk '/After/{a=1; k++;next}/Before/{a=0}; (a==1){print NR" : "$0 > k".out"}' file 

kここでは、単語が見つかった回数を計算するために変数を使用しますAfter。出力ファイルはkとの現在の値になります.out。あなたの例で上記のコードを実行すると、次のような結果が得られます。

$ ls
1.out  2.out  3.out  4.out  5.out

おすすめ記事