Inserir nova linha após padrão não correspondente

2

Tenho a seguinte saída do script

host1:101
host1:102
host2:101
host2:102
host2:103
host4:101
host5:101
host5:102
host5:103
host5:104

etc.

Eu queria inserir uma nova linha depois de cada grupo de hosts.

host1:101
host1:102

host2:101
host2:102

host3:101
host3:102

Qualquer usuário on-line do AWK para comparar cada linha consagrada com o primeiro campo e inserir uma nova linha antes do 1º campo não correspondente?

    
por sudobash 12.08.2014 / 01:15

4 respostas

4
 awk -F: '{if (NR>1 && save!=$1) print "";} {save=$1; print;}'

Você nunca deseja inserir uma linha em branco antes da linha 1, então nem pense nisso a menos que NR>1 . Posteriormente, imprima a linha em branco se o primeiro campo não é o valor salvo da linha anterior.

    
por 12.08.2014 / 01:28
2

Outro awk :

awk -F: 'a!~$1{print x}a=$1' file

Remover a primeira linha em branco da saída

awk -F: 'a&&a!~$1{print x}a=$1' file
    
por 12.08.2014 / 10:54
1

Mais uma abordagem do awk:

awk -F ':' '!a[$1]++ && NR>1{print ""}1' file
    
por 12.08.2014 / 10:07
1

Outro 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
    
por 12.08.2014 / 05:08