2

現在のシステム データ/統計情報を返すことができる Linux ドライバーをバックグラウンドで実行しています。コンソールでコンソール ユーティリティ (これをdump-dataと呼びましょう) を実行してデータを表示します。dump-dataを実行するたびに、すべてのデータがダンプされます。ユーティリティの出力は次のようになります

Output:
- A=reading1
- B=reading2
- C=reading3
- D=reading4
- E=reading5
...
- variableX=readingX
...

ユーティリティによって返される読み取り値のリストは、非常に長くなる可能性があります。シナリオによっては、特定の読み取り値が役に立ちますが、それ以外はすべて役に立ちません。

名前に共通点がない可能性のある有用な読み取り値のみを grep する方法が必要です (bash スクリプトを使用)。つまり、A、D、E を収集する必要がある場合があります。また、C、D、Eが必要になる場合もあります。

傾向を探すために経時的な測定値をグラフ化しようとしているので、次のようなものを実行することはできません:

# forgive my pseudocode
Loop
    dump-data | grep A
    dump-data | grep D
    dump-data | grep E
End Loop

A、D、Eを収集すると、正確ではないため、ダンプデータの3つの別々の呼び出しから実際に読み取り値が得られます。

4

4 に答える 4

5

grep のすべての結果を同じファイルに保存したい場合は、すべての式を 1 つに結合できます。

grep -E 'expr1|expr2|expr3'

しかし、結果 (expr1、expr2、および expr3 の) を別々のファイルに格納したい場合は、さらに興味深いものになります。

を使用してこれを行うことができますtee >(command)

たとえば、ここでは、同じパイプを 3 つの異なるコマンドで処理しています。

$ echo abc | tee >(sed s/a/_a_/ > file1) | tee >(sed s/b/_b_/ > file2) | sed s/c/_c_/ > file3
$ grep "" file[123]
file1:_a_bc
file2:a_b_c
file3:ab_c_

しかし、コマンドが複雑すぎるようです。

dump-data結果をファイルに保存してから grep した方がよいでしょう。

TEMP=$(mktemp /tmp/dump-data-XXXXXXXX)
dump-data > ${TEMP}
grep A ${TEMP}
grep B ${TEMP}
grep C ${TEMP}
于 2012-08-02T08:45:28.257 に答える
2

使用できますdump-data | grep -E "A|D|E"-Egrep のオプションに注意してください。egrepまたは、オプションなしで使用することもでき-Eます。

于 2012-08-02T08:45:24.270 に答える
1

あなたは単に使用することができます:

dump-data | grep -E 'A|D|E'
于 2012-08-02T08:45:32.493 に答える
0
awk '/MY PATTERN/{print > "matches-"FILENAME;}' myfile{1,3}

thx Stack Exchange第一人者

于 2014-11-16T17:29:35.760 に答える