使用 awk 和/或 grep 根据预定义值搜索各个行,然后查看以下行是否有匹配的值

使用 awk 和/或 grep 根据预定义值搜索各个行,然后查看以下行是否有匹配的值

假设我得到了以下几行

[duration] =>  92
[from] => 18884541236
[to] => 17841234568

我想要做的是搜索整个文件以查看[发件人]号码与[收件人]号码相同的任何实例。

所以如果我有一个看起来像这样的条目

[duration] => 43
[from] =>  17873332222
[to] => 17873332222

我可以在文件中搜索 [from] 号码在下一行中紧跟相同的 [to] 号码的位置。

答案1

[to]此命令将打印行号以及第一个字段为且第三个字段与最近看到的值相同的任何行的内容[from]

awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file 

将此文件作为输入:

[duration] =>  92
[from] => 18884541236
[to] => 17841234568
[duration] => 43
[from] =>  17873332222
[to] => 17873332222

你得到这个输出:

$ awk '{ if($1=="[from]"){from=$3} } $1=="[to]" && $3==from{print NR,$0}' file 
6 [to] => 17873332222

答案2

从样本来看(我知道很危险)

如果[duration]永远不会等于[from]并且[to]总是紧随其后,那么这可能很简单......

awk '$3==last{ print NR, $0} {last=$3}' file

相关内容