Как сравнить две строки, разделенные "-", и использовать только одну из них, когда они одинаковые? - PullRequest
0 голосов
/ 06 января 2019

У меня есть файл, в котором у меня есть несколько примеров строк:

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

Как это сделать?

Ответы [ 2 ]

0 голосов
/ 06 января 2019

в этом случае вы можете использовать регулярное выражение с sed

 sed 's/^\([^-]*\)-\1$/\1/'
0 голосов
/ 06 января 2019

Использование 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 

Т.е.. установите разделитель полей на - и, если $1 и $2 равны, выведите только первое.

Редактировать : Чтобы избавиться от этого пробела, вы можете: awk -F- -v OFS="" ... т.е. установите разделитель выходного поля OFS на пустой ("") или посмотрите комментарии для других.

...