以下命令用于获取第N行" AFTER"模式匹配,n
为正数时。
但同样的命令无法获取第N行" BEFORE"模式匹配,当我将n
作为负数时。你能帮帮忙吗?
awk /pattern_to_match/{x = NR + n}NR == x file_to_search
谢谢, BSD
答案 0 :(得分:3)
grep -B N 'pattern_to_match' file_to_search | head -1
将N
替换为您想要的匹配前的第N行。
实施例: 文件“a”包含:
hello
there
how
are
you?
正在运行grep -B 2 "are" a | head -1
会返回there
。
可能的问题:如果匹配前没有N
行,则会返回该文件的第一行。
答案 1 :(得分:1)
这样的事可能会有所帮助
tac file_to_search | awk '/pattern_to_match/{x = NR + n}NR == x'
或
awk '{arr[FNR]=$0} /pattern_to_match/{x=FNR-3;if(x in arr){ print arr[x]; exit}}'
示例:
$ seq 10
1
2
3
4
5
6
7
8
9
10
$ seq 10 | tac | awk '/^7/{x = NR + 3}NR == x'
4
$ seq 10 | awk '{arr[FNR]=$0} /^7/{x=FNR-3;if(x in arr){ print arr[x]; exit}}'
4