首页 > 解决方案 > 如何比较以“-”分隔的两个字符串,并在它们相同时只使用其中一个?

问题描述

我有一个文件,其中有一堆示例行:

1.2.4.0-1.2.4.255
1.2.8.0-1.2.8.255
1.9.96.105-1.9.96.105
1.9.102.251-1.9.102.251
1.9.106.186-1.9.106.186
1.16.0.0-1.19.255.255
1.55.241.140-1.55.241.140

每条线路都是一个 IP 范围,但有些线路,例如1.9.96.105-1.9.96.105只有一个 IP。这样的行应该被转换成1.9.96.105这样列表看起来像:

1.2.4.0-1.2.4.255
1.2.8.0-1.2.8.255
1.9.96.105
1.9.102.251
1.9.106.186
1.16.0.0-1.19.255.255
1.55.241.140

怎么做?

标签: baship

解决方案


使用 awk:

$ awk -F- '$1==$2{$2=""}1' file
1.2.4.0-1.2.4.255
1.2.8.0-1.2.8.255
1.9.96.105 
1.9.102.251 
1.9.106.186 
1.16.0.0-1.19.255.255
1.55.241.140 

IE。将字段分隔符设置为-and if $1and $2equal,只打印第一个。

编辑:要摆脱尾随空格,您可以:awk -F- -v OFS="" ...即。将输出字段分隔符设置OFS为空 ( "") 或查看其他人的评论。


推荐阅读