$ awk -F, '{ for (i=2; i<=NF; ++i) if ($i != $1) { print "no_match"; next } print $1 }' file
1-69
no_match
1-46
no_match
6-1
5-51
4-59
Sinto muito, mas nem olhei para o seu código, havia muita coisa acontecendo. Quando você se encontrar chamando awk
três vezes no corpo de um loop nos mesmos dados, terá que procurar outras maneiras de fazê-lo com mais eficiência. Além disso, se você envolver awk
, não precisará de grep
e cut
, já que awk
poderia facilmente executar suas tarefas (que, no entanto, não são necessárias).
O script awk
acima lê uma linha delimitada por vírgula por vez e compara cada campo com o primeiro campo. Se algum dos testes falhar, a string no_match
será impressa e o script continuará com a próxima linha. Se o loop terminar (sem encontrar uma incompatibilidade), o primeiro campo será impresso.
Como um script:
#!/usr/bin/awk -f
BEGIN { FS = "," }
{
for (i=2; i<=NF; ++i)
if ($i != $1) {
print "no_match"
next
}
print $1
}
-
FS
é o separador de campo de entrada, também configurável com a opção-F
na linha de comando.awk
dividirá cada linha nesse caractere para criar os campos. -
NF
é o número de campos no registro atual ("colunas na linha"). -
$i
refere-se ao campo i: th no registro atual, em quei
pode ser uma variável ou uma constante (como em$1
).
Relacionados:
#!/usr/bin/awk -f
BEGIN { FS = "," }
{
output = $1
for (i=2; i<=NF; ++i)
if ($i != output) {
output = "no_match"
break
}
print output
}