0

CSH/TCSH スクリプトでの文字列処理について助けが必要です。基本的な処理は知っていますが、高度な文字列操作の要件を処理する方法を理解するのに助けが必要です。

次のような形式のログ ファイルがあります。

[START_A]

Aのログ情報

[END_A]

[START_B]

Bのログ情報

[END_B]

[START_C]

Cのログ情報

[END_C]

私の要件は、開始タグと終了タグの間のコンテンツを選択的に抽出し、ファイルに保存することです。たとえば、START_A と END_A の間のコンテンツは A.log に保存されます

4

3 に答える 3

1

これはあなたのために働くはずです:

awk -F'_' '/\[START_.\]/{s=1;gsub(/]/,"",$2);f=$2".txt";next;}/\[END_.\]/{s=0} s{print $0 > f}' yourLog

テスト:

kent$  cat test
    [START_A]

    log info of A

    [END_A]

    [START_B]

    log info of B

    [END_B]

    [START_C]

    log info of C

    [END_C]


kent$  awk -F'_' '/\[START_.\]/{s=1;gsub(/]/,"",$2);f=$2".txt";next;}/\[END_.\]/{s=0} s{print $0 > f}' test

kent$  head *.txt
==> A.txt <==

    log info of A


==> B.txt <==

    log info of B


==> C.txt <==

    log info of C
于 2012-04-13T07:17:07.773 に答える
0

これはあなたのために働くかもしれません:

sed '/.*\[START_\([^]]*\)\].*/s||/\\[START_\1\\]/,/\\[END_\1\\]/w \1.log|p;d' file |
sed -nf - file
于 2012-04-13T07:47:04.960 に答える
0

awk は一度に 1 つずつ実行できます。

cat log | awk '/[START_A]/,/[END_A]/'
于 2012-04-13T06:54:57.427 に答える