如何比较两条线,这些线相对于空间是倒置的

时间:2013-01-28 08:23:42

标签: bash sed awk

我有以下VPN隧道状态输出:

[root@localhost:~]# setkey -D
82.113.11.226 10.18.1.201
        esp mode=tunnel spi=143937423(0x08944f8f) reqid=0(0x00000000)
        E: 3des-cbc  c114543c 3049e8b8 c033e4ea 07e0054e 3e8ac254 f0dbb7f5
        A: hmac-md5  8461e21b 2318bb9c 352bee1d e24a0a53
        seq=0x00000000 replay=4 flags=0x00000000 state=mature
        created: Jan 28 09:52:41 2013   current: Jan 28 09:56:58 2013
        diff: 257(s)    hard: 3600(s)   soft: 2880(s)
        last: Jan 28 09:52:49 2013      hard: 0(s)      soft: 0(s)
        current: 852(bytes)     hard: 0(bytes)  soft: 0(bytes)
        allocated: 11   hard: 0 soft: 0
        sadb_seq=1 pid=12264 refcnt=0
10.18.1.201 82.113.11.226
        esp mode=tunnel spi=3053715472(0xb6040010) reqid=0(0x00000000)
        E: 3des-cbc  28c87550 a6c9a17b 37ad0b02 03567617 79647aeb 644563d8
        A: hmac-md5  0ef83de9 1b279a16 658eb176 dad37d50
        seq=0x00000000 replay=4 flags=0x00000000 state=mature
        created: Jan 28 09:52:41 2013   current: Jan 28 09:56:58 2013
        diff: 257(s)    hard: 3600(s)   soft: 2880(s)
        last: Jan 28 09:52:41 2013      hard: 0(s)      soft: 0(s)
        current: 1524(bytes)    hard: 0(bytes)  soft: 0(bytes)
        allocated: 19   hard: 0 soft: 0
        sadb_seq=0 pid=12264 ref 

我想获取仅包含ip地址的行,并比较第一行的左边部分是否与第二行的右边部分相等,这是空格的分隔和vise - 反之亦然。在第一步,我做了以下命令:

[root@localhost:~]# setkey -D | sed -n '/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/p'
82.113.11.226 10.18.1.201
10.18.1.201 82.113.11.226

线条对空间感兴趣。任何人都可以建议任何awk或sed表达式吗?

3 个答案:

答案 0 :(得分:3)

使用awk比较字符串更容易。试试这个:

setkey -D | awk 'NR==1 { a=$1; b=$2; next } !/^ / { print ($1==b && $2==a ? "match" : "none") }'

在您的输入中,我的结果是:

match

答案 1 :(得分:1)

首先使用tr将IP地址置于同一行,然后使用带有反向引用的egrep检查它们是否相同:

$ cat file
10.18.1.201 82.113.11.226
82.113.11.226 10.18.1.201

$ tr '\n' ' ' < file | egrep "^(.*) (.*) \2 \1"
82.113.11.226 10.18.1.201 10.18.1.201 82.113.11.226

答案 2 :(得分:0)

我认为最好的方法是简单地使用read并将数据读取到这样的单独变量中:

read -r trash right
read -r left trash
# compare left and right