如果我必须在
这两个关键字之间阅读,有人可以建议做什么*System_Power
1
1.2
1.8
2
*System_Terminate
在这种情况下,asnwer将是
1
1.2
1.8
2
我尝试使用像
这样的awkawk '$0 =="*System_Power" # start printing when 1st field is *System_Power
$0 != "*System_Terminate"{ # until reach the *System_Terminate
print; } ' powerSummary > reportedFailure.k # Read from file powerSummary and pipe to reportedFailure.k
exit
上面的数据位于文件powerSummary的中间位置。
我会感谢您的更正。
答案 0 :(得分:5)
这对你有用:
$ awk '/\*System_Power/{f=1;next}/\*System_Terminate/{f=0}f' infile
1
1.2
1.8
2
答案 1 :(得分:2)
您可以使用sed
轻松选择两个匹配行之间的文本,但这也包括匹配行本身...所以我们明确删除它们:
sed -n '/System_Power/,/System_Terminate/ {
/^\*/ d
p
}' < input
Awk还可以选择匹配行之间的文字:
awk '/System_Power/,/System_Terminate/ {print}' < input
...但与sed
类似,这将包括开始/结束终止符。您可以使用awk
解决此问题,但我认为您可以使用sed
获得更清晰的解决方案。
答案 2 :(得分:1)
这是另一个:
awk '$1=="*System_Power",$1=="*System_Terminate" {if (!/System*/) print}' in.txt
答案 3 :(得分:1)
这可能对您有用:
sed '/^\*System_Power/,/^\*System_Terminate/!d;//d' file
或者这个:
awk '/^\*System_Terminate/{p=0};p;/^\*System_Power/{p=1}' file