在不匹配的模式后插入新行

在不匹配的模式后插入新行

我有以下脚本输出

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

相关内容