我有许多大型数据文件,想要从整个文件中选择某些结果。该文件提供了不同参数的数据,即:
Number value 123 Option1 value parameter parameter Option2 value parameter parameter Option3 value parameter parameter Number value 456 Option1 value2 parameter2 parameter2 Option2 value2 parameter2 parameter2 Option3 value2 parameter2 parameter2 Number value 789 Option1 value3 parameter3 parameter3 Option2 value3 parameter3 parameter3 Option3 value3 parameter3 parameter3
例如,如果我想记录Option2行,但只记录Number值123和Number值456(粗体 1)之间的那个,我该怎么办?我试过grep,但我认为它可能需要awk或其中一些变化?
由于
答案 0 :(得分:3)
尝试:
awk '/Number value 123/,/Number value 456/{if ($0 ~ /Option2/){print}}' file
还要打印下面的一行(在评论中提问):
awk '/Number value 123/,/Number value 456/{if ($0 ~ /Option2/){print;getline;print}}' file
<强>解释强>
/Number value 123/,/Number value 456/
:将获得两种模式之间的行范围。
实施例
$ awk '/Number value 123/,/Number value 456/' file
Number value 123
Option1 value parameter parameter
Option2 value parameter parameter
Option3 value parameter parameter
Number value 456
if ($0 ~ /Option2/){print;getline;print}
:如果我们的模式对记录$0 ~ /Option2/
进行数学计算,则打印,然后getline
将获取下一条记录 ($0
)将被下一个print
抛给输出。
实施例
$ awk '/Number value 123/,/Number value 456/{if ($0 ~ /Option2/){print;getline;print}}' file
Option2 value parameter parameter
Option3 value parameter parameter
答案 1 :(得分:3)
您可以使用datatalking
和sed
:
grep
sed -n '/Number value 123/,/Number value 456/p' <fileName> | grep 'Option2'
在sed -n '/x/,/y/p'
和x
之间打印文件部分,然后您可以使用y
进行搜索。
答案 2 :(得分:1)
sed不需要grep:
sed -n '/Number value 123/,/Number value 456/{/Option2/p}' file
如果您知道数据是按设定顺序,则替换awk:
awk '/Number value (123|456)/{a=!a}a && /Option2/' file