我有以下脚本输出
host1:101
host1:102
host2:101
host2:102
host2:103
host4:101
host5:101
host5:102
host5:103
host5:104
ETC..
我想在每个主机组之后插入一个新行。
host1:101
host1:102
host2:101
host2:102
host3:101
host3:102
是否有 AWK 在线用户将每个连续行与第一个字段进行比较,并在不匹配的第一个字段之前插入新行?
答案1
awk -F: '{if (NR>1 && save!=$1) print "";} {save=$1; print;}'
您永远不想在第 1 行之前插入空行,所以根本不用考虑它,除非NR>1
。此后,如果第一个字段不是上一行保存的值,则打印空行。
答案2
其他awk
:
awk -F: 'a!~$1{print x}a=$1' file
删除输出的第一个空行
awk -F: 'a&&a!~$1{print x}a=$1' file
答案3
另一种 awk 方法:
awk -F ':' '!a[$1]++ && NR>1{print ""}1' file
答案4
其他awk
:
$ awk -F':' 'FNR > 1 && p != $1 {printf "\n"};{p = $1}1' file
host1:101
host1:102
host2:101
host2:102
host2:103
host4:101
host5:101
host5:102
host5:103
host5:104