Como comparar colunas de uma linha no mesmo arquivo?

1

Este é o meu arquivo de entrada:

A B B A  
A A A   
B A B A  
B B  
A A  
A B

Se todas as colunas forem iguais, quero imprimir apenas a primeira coluna.
Caso contrário, quero imprimir multi .

Saída desejada:

multi  
A  
multi  
B  
A  
multi

Alguém pode me ajudar? (Eu prefiro awk ou sed .)

    
por user2905046 31.01.2017 / 13:57

3 respostas

4

Com o AWK:

awk '{ for (i = 2; i <= NF; i++) { if ($i != $1) { print "multi"; next } }; print $1 }'

Isso processa cada linha da seguinte forma:

  • a partir do segundo campo, compare cada campo com o primeiro;
  • se uma diferença for encontrada, imprima "multi" e vá para a próxima linha;
  • se nenhuma diferença for encontrada (o ciclo termina, ou é totalmente ignorado, por exemplo para uma linha contendo nenhum ou apenas um campo), imprima o primeiro campo (e vá para a próxima linha).
por 31.01.2017 / 13:59
2

awk / perl são as melhores ferramentas para este trabalho, mas você pode fazê-lo com sed também:

sed -E 's/^([^[:blank:]]*)([[:blank:]]+)*$//;t;s/.*/multi/' infile
    
por 31.01.2017 / 16:45
0
$ awk '{b=$1; gsub($1,""); if (/^\s*$/) {print b} else {print "multi"}}' file         
multi
A
multi
B
A
multi
    
por 02.02.2017 / 17:00