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 中处理制表符和空格(可以/应该做很多事情来改进此界面,但对于一次性的,这很好)。

于 2012-05-28T10:57:26.783 回答
1

也许awk会适合您的需求。尝试这个:

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

结果:

hits=0035191479 misses=0000013657

高温高压

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

Example output:

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

sed(如果我得到正确的你想要的):

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

基本上它将搜索匹配的l1_user_instr行,并在该行上创建两个组以匹配所需的数据,然后将它们打印成新的行分隔,然后退出。解决方案类似awk

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