Eu não acho que você pode fazer isso com join
sozinho. Você poderia fazer:
join -t, -a1 -a2 -o0,1.2,1.3,1.4,1.5,2.2,2.3,2.4,2.5 -e MISSING 1.txt 2.txt |
perl -F, -lape '@F[1..2]=@F[5..6] if $F[1] eq "MISSING";
$_=join",",@F[0..4],@F[7..8]'
-
-p
: use um loop de leitura de linha por linha como em sed / awk -
-a
,-F,
: como o awk, divida as linhas em campos (na matriz@F
). -
-l
: funciona no conteúdo das linhas (funciona comoawk
, em que a entrada é dividida emRS
($/
) (masRS
não incluído em$0
) eORS
($\
) é anexado antes da impressão). -
-e ...
: perl [e] xpression para avaliar para cada linha. - Em seguida, lê-se quase como inglês: os campos 1 a 2 são definidos para os campos 5 a 6, se o campo 1 (o segundo campo como índices começa em 0) for "MISSING". Em seguida, defina o conteúdo do registro atual ($ _ é como $ 0 no awk) para os campos 0 a 4 e 7 a 8.
Na verdade, escrever o mesmo em awk
não é mais complicado:
awk -F, -vOFS=, '$2 == "MISSING"{$2=$6;$3=$7}
{print $1,$2,$3,$4,$5,$8,$9}'