bash - 如何比较以“-”分隔的两个字符串,并在它们相同时只使用其中一个?
问题描述
我有一个文件,其中有一堆示例行:
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
怎么做?
解决方案
使用 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 $1
and $2
equal,只打印第一个。
编辑:要摆脱尾随空格,您可以:awk -F- -v OFS="" ...
即。将输出字段分隔符设置OFS
为空 ( ""
) 或查看其他人的评论。
推荐阅读
- ios - 选择图像后反应原生图像选择器打开键盘?
- cmake - 使 Cmakelist (ros) 失败
- angular - 将 ngIf 放置在表单元素上后,FormControl 元素未定义
- python - 如何显示使用 pytube 下载 YouTube 视频的进度?
- c# - [已解决]我怎样才能得到
在 asp:repeater 中单击 div 的 div 中的值?
- azure - 天蓝色逻辑应用程序设计器中的“将自适应卡发布到团队频道并等待响应”错误
- codenameone - 找不到档案 pod 和 Podfile.lock
- anaconda - 我可以在离开 conda (Ubuntu) 时删除 anaconda 吗?
- c - 这里的“分配内存块的开始”是什么意思?
- html - 左侧的角度下拉按钮