假设我得到了以下几行
[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