0

取得したいパラメータがいくつかある行があります。これを行うための最良の方法は何ですか?

行の例は次のとおりです。

l1_user_instr hits=0035191479 misses=0000013657
l1_user_data hits=0009562889 misses=0001215170

特定の構成hits=xxを提供するスクリプトを作成したいと思います。miss=yy

grep l1_user_instr_hits | sed ?

私はsedの専門家ではないので、質問です。

4

4 に答える 4

2

何を探しているのかは完全にはわかりませんが、他の回答のコメントから判断すると、ヒット数またはミス数のいずれかを取得する機能が必要だと思います。たとえば、構成'l1_user_data'のヒットを検索する場合、出力を正確に次のようにする必要があります。

0009562889

簡単なこと(より良いインターフェースを追加することができます)は次のようになります:

awk -v f=3 -v c=l1_user_instr -F ' *|=' '$0 ~ c {print $f}' input

=FSを設定して行と空白を分割することにより、ヒット数をフィールド3にし、ミス数をフィールド5にしました。変数cを一致させたい文字列に設定し、fをに設定します。表示するフィールド(3または5)。FSでスペースだけでなくタブも処理したい場合があることに注意してください(このインターフェイスを改善するために実行できる/実行する必要のあることがたくさんありますが、1回限りの場合はこれで問題ありません)。

于 2012-05-28T10:57:26.783 に答える
1

sed(私があなたが望むものを正しく得た場合):

sed '/l1_user_instr/ s/.*\(hits=\d\+\) \(misses=\d\+\)[^0-9]*$/\1\n\2/;q' INPUTFILE

基本的には一致する行を検索しl1_user_instr、その行に必要なデータを一致させるための2つのグループを作成し、それらを新しい行で区切って印刷して終了します。解決策は似ていawkます:

awk '/l1_user_instr/ {printf("%s\n%s\n",$2,$3) ; exit}' INPUTFILE
于 2012-05-28T07:21:12.967 に答える
1

おそらくawkあなたのニーズに合うでしょう。これを試して:

awk '/l1_user_instr/ { print $2,$3 }' file.txt

結果:

hits=0035191479 misses=0000013657

HTH

于 2012-05-28T06:44:26.437 に答える
1
while IFS=" =" read -r type _ hits _ misses
do
    echo "Type: $type, Hits: $hits, Misses: $misses"
done < inputfile

出力例:

Type: l1_user_instr, Hits: 0035191479, Misses: 0000013657
Type: l1_user_data, Hits: 0009562889, Misses: 0001215170
于 2012-05-28T08:02:11.233 に答える