使用awk命令获取行

时间:2017-09-11 09:19:53

标签: awk

以下命令用于获取第N行" AFTER"模式匹配,n为正数时。

但同样的命令无法获取第N行" BEFORE"模式匹配,当我将n作为负数时。你能帮帮忙吗?

awk /pattern_to_match/{x = NR + n}NR == x file_to_search

谢谢, BSD

2 个答案:

答案 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