bash-如果找到图案,则打印两个连续行
我需要在一个文件中搜索一个字符串,并在另一个文件中打印匹配行及其下一行。 例如: 输入文件:bash-如果找到图案,则打印两个连续行,bash,awk,grep,Bash,Awk,Grep,我需要在一个文件中搜索一个字符串,并在另一个文件中打印匹配行及其下一行。 例如: 输入文件: >3456/1 A >1234/2 B >5678/1 C >8976/2 D 搜索:/2 输出: >1234/2 B >8976/2 D 使用grep: $ grep -A1 '/2' file >1234/2 B -- >8976/2 D 从man页面: -A num, --after-context=num Prin
>3456/1
A
>1234/2
B
>5678/1
C
>8976/2
D
搜索:/2
输出:
>1234/2
B
>8976/2
D
使用
grep
:
$ grep -A1 '/2' file
>1234/2
B
--
>8976/2
D
从man
页面:
-A num, --after-context=num
Print num lines of trailing context after each match.
您可以通过管道将--
删除到grep-v'--'
或者如果您有GNUgrep
,则只需执行以下操作:
$ grep --no-group-separator -A1 '/2' file
>1234/2
B
>8976/2
D
您可以将此命令的输出重新定向到另一个文件 使用
grep
:
$ grep -A1 '/2' file
>1234/2
B
--
>8976/2
D
从man
页面:
-A num, --after-context=num
Print num lines of trailing context after each match.
您可以通过管道将--
删除到grep-v'--'
或者如果您有GNUgrep
,则只需执行以下操作:
$ grep --no-group-separator -A1 '/2' file
>1234/2
B
>8976/2
D
您可以将此命令的输出重新定向到另一个文件 使用grep-A
请参见手册页:
以下是一个例子:
%grep -A2 /2 input
>1234/2
B
>5678/1
--
>8976/2
D
使用grep-A
请参见手册页:
以下是一个例子:
%grep -A2 /2 input
>1234/2
B
>5678/1
--
>8976/2
D
下面是
grep
正确的工具,但使用awk
您将得到:
awk '/\/2/ {print $0;getline;print $0}' file
>1234/2
B
>8976/2
D
PS你应该用谷歌找到你自己。这个问题被问了很多次。这里是
grep
正确的工具,但是使用awk
你会得到:
awk '/\/2/ {print $0;getline;print $0}' file
>1234/2
B
>8976/2
D
PS你应该用谷歌找到你自己。这个问题被问了很多次。使用GNU
sed
sed -n '/\/2/,+1p' file
例如:
$ sed -n '/\/2/,+1p' file
>1234/2
B
>8976/2
D
使用GNU
sed
sed -n '/\/2/,+1p' file
例如:
$ sed -n '/\/2/,+1p' file
>1234/2
B
>8976/2
D
为什么要使用
getline
awk'/\/2/{c=2}c-->0'文件
@jaypal这也会起作用。为什么?getline
是awk
中的一个函数,它可以正常工作,但您必须克服一些缺陷。或者您也可以这样做:awk'/\/2/{{uU=2}_&&_--'file
不必要地使用getline和名为.
的变量-你已经进入了黑暗的一面…@jaypal-你需要c&&c--
而不是c-->0
的原因是后者将不断递减c
,即使在它为负值之后,理论上如果输入文件足够大,你也可以这样做环绕签名数字的大小,使其再次显示为正数,然后从该点开始打印文件。谢谢@EdMorton。这是一个伟大的观点。我没想到。感谢你的解释<代码>:)。为什么要使用getline
awk'/\/2/{c=2}c-->0'文件
@jaypal这也会起作用。为什么?getline
是awk
中的一个函数,它可以正常工作,但您必须克服一些缺陷。或者您也可以这样做:awk'/\/2/{{uU=2}_&&_--'file
不必要地使用getline和名为.
的变量-你已经进入了黑暗的一面…@jaypal-你需要c&&c--
而不是c-->0
的原因是后者将不断递减c
,即使在它为负值之后,理论上如果输入文件足够大,你也可以这样做环绕签名数字的大小,使其再次显示为正数,然后从该点开始打印文件。谢谢@EdMorton。这是一个伟大的观点。我没想到。感谢你的解释<代码>:)。