我有一条线,其中包含一些我想要获取的参数。做这个的最好方式是什么?
示例行是:
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 方面的专家,因此也不是这个问题。
目前尚不完全清楚您在寻找什么,但从其他答案中的评论来看,我认为您希望能够获得命中数或未命中数,仅此而已。例如,在查找配置“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 中处理制表符和空格(可以/应该做很多事情来改进此界面,但对于一次性的,这很好)。
也许awk
会适合您的需求。尝试这个:
awk '/l1_user_instr/ { print $2,$3 }' file.txt
结果:
hits=0035191479 misses=0000013657
高温高压
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
与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