Это - вывод, который я имею теперь. Как я могу добраться от Входа для Вывода?
Вход:
1.2.3.4.5
2.3.4.5.6
Вывод:
1.2.3.4-5
2.3.4.5-6
Премия: у Меня есть другие 80% сделанного сценария, но это - мой идеальный вывод. Существует ли супер простой способ сделать это?
Вход:
1.2.3.4-1.2.3.10
Вывод:
1.2.3.4-10
С awk
:
awk -F '[-.]' '{printf "%s.%s.%s.%s-%s\n", $1, $2, $3, $4, $NF}'
, Так как это похоже, Вы хотите поля 1-4 и последнее поле от входа, разделенного или .
или -
, и вывод, отформатированный со всеми кроме последнего поля, разделенного .
.
более кратко:
awk -F '[-.]' -v OFS=. '{$4 = $4"-"$NF; NF=4}1'
Первая часть:
$ sed 's/\./-/4' file.txt
, Который заменяет 4-е возникновение .
с -
.
Для Вашего раздела Bonus:
sed -r 's/(.*)-.*\.(.*)$/\1-\2/' file.txt
вход:
1.2.3.4-1.2.3.10
вывод:
1.2.3.4-10
Мы можем использовать группировку с жадным соответствием с sed как так:
$ sed -r 's/(.*)\.(.*)$/\1-\2/' input.txt
1.2.3.4-5
2.3.4.5-6
Та же идея для жемчуга:
$ perl -pe's/(.*)\.(.*)$/\1-\2/' input.txt
1.2.3.4-5
2.3.4.5-6
, Но мы можем играть вокруг с .
как разделитель столбцов в awk:
$ awk -F '.' 'BEGIN{OFS=FS}{$NF=-$NF;sub(/\.-/,"-");print}' input.txt
1.2.3.4-5
2.3.4.5-6