这是我现在的输出。如何从输入转到输出?
输入:
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
答案1
和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'
- 将最后一个字段添加到第四个字段,并将字段数设置为 4。
答案2
第一部分:
$ sed 's/\./-/4' file.txt
将第 4 次出现的 替换.
为-
。
对于您的奖金部分:
sed -r 's/(.*)-.*\.(.*)$/\1-\2/' file.txt
输入:
1.2.3.4-1.2.3.10
输出:
1.2.3.4-10
答案3
我们可以使用 sed 进行贪婪匹配分组,如下所示:
$ sed -r 's/(.*)\.(.*)$/\1-\2/' input.txt
1.2.3.4-5
2.3.4.5-6
对于 perl 来说也是同样的想法:
$ 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