%20para%20m%C3%BAltiplas%20colunas.png)
Estou usando Win7 com Cygwin. Eu tenho uma linha que funcionará para identificar correspondências em um PAR de colunas, mas quando tento introduzir colunas adicionais (ou seja,> 2) não consigo fazê-lo funcionar. Então o seguinte funciona para mim:
gawk -F "^" '{ if ($3 == $7) print "0"; else print $3,$7; }' infile.txt > outfile.txt
No entanto, quando adiciono outro par de colunas, recebo erros de sintaxe:
gawk -F "^" '{ if ($3 == $7 || $3 == $11) print "0"; else print $3,$7,$11; }' infile.txt > outfile.txt
Então, algo está errado com o comando, mas as mensagens de erro não são realmente úteis para mim. Quando substituo "&&" por "||" Também recebo erros ("nova linha inesperada ou fim de string" logo após o primeiro "$7" e também "$3 não é reconhecido como um comando interno ou externo, programa operável ou arquivo em lote").
Então aqui está um exemplo de arquivo de entrada, contendo as três linhas, com "^" como delimitador de coluna:
paris^london^new york^paris^rome^paris
paris^london^munich^paris^rome^paris
paris^london^munich^berlin^rome^paris
Quero poder ver se, em cada linha do arquivo, as colunas 1, 4 e 6 correspondem entre si. Portanto, neste caso, a linha 1 é “sim”, a linha 2 é “sim” e a linha 3 é “não”. Portanto, a saída deve mostrar “0” para “sim” ou repetir a linha inteira para “não”. Então a saída seria:
0
0
paris^london^munich^berlin^rome^paris
Alguma ideia ?
Responder1
Tente evitar ||
e&&
Para
&&
testegawk -F "^" '$3 == $7{if($3 == $11){print "0"; next;}}{print $3,$7,$11}'
Para
||
testegawk -F "^" '$3 == $7{print "0"; next;}$3 == $11{print "0"; next;}{print $3,$7,$11}'
Responder2
Finalmente entendi. Estou usando Cygwin com Win7. As aspas simples não eram boas, portanto, substituir TODAS as aspas simples por aspas duplas corrigiu a sintaxe e, além disso, "||" não foi bom, mas "&&" funciona bem. Então funciona o seguinte:
gawk -F "^" "{ if ($1 == $2 && $3 == $4 && $4 == $5 && $5 == $6) imprimir 0; senão imprimir $1,$2,$3; }" infile.txt > outfile.txt