使用awk命令获取行

使用awk命令获取行,awk,Awk,当n为正数时,下面的命令用于获取模式匹配后的第n行 但是,当我将n作为负数时,同样的命令不适用于获取模式匹配前的第n行。你能帮忙吗 awk /pattern_to_match/{x = NR + n}NR == x file_to_search 谢谢, BSD类似的东西可能会有所帮助 tac file_to_search | awk '/pattern_to_match/{x = NR + n}NR == x' 或 示例: $ seq 10 1 2 3 4 5 6 7 8 9 10 $ s

n
为正数时,下面的命令用于获取模式匹配后的第n行

但是,当我将
n
作为负数时,同样的命令不适用于获取模式匹配前的第n行。你能帮忙吗

awk /pattern_to_match/{x = NR + n}NR == x file_to_search
谢谢,
BSD类似的东西可能会有所帮助

tac file_to_search | awk '/pattern_to_match/{x = NR + n}NR == x'

示例:

$ 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

像这样的东西可能会有帮助

tac file_to_search | awk '/pattern_to_match/{x = NR + n}NR == x'

示例:

$ 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
N
替换为所需匹配前的第N行数字

例如: 文件“a”包含:

hello
there
how
are
you?
运行
grep-b2“是”a | head-1
返回
那里

可能的问题:如果匹配之前没有
N
行,将返回文件的第一行

N
替换为所需匹配前的第N行数字

例如: 文件“a”包含:

hello
there
how
are
you?
运行
grep-b2“是”a | head-1
返回
那里


可能的问题:如果在匹配之前没有
N行,文件的第一行将被返回。

在下面的命令中==>awk'{arr[FNR]=$0}/^7/{x=FNR-3;如果(x In arr){print arr[x];exit}==>我在哪里提供文件名?@BSD
awk'{arr[FNR]=$0}/^7/{x=FNR-3;如果(x In arr){print arr[x];exit}}下面命令中的'your_file
==>awk'{arr[FNR]=$0}/^7/{x=FNR-3;if(x In-arr){print arr[x];exit}==>我在哪里提供文件名?@BSD
awk'{arr[FNR]=$0}/^7/{x=FNR-3;if(x In-arr){print arr[x];exit}}你的文件