Usando bash
:
join -t @ -1 2 -2 2 -o2.1,1.2 -a 1 -e NULL \
<( sort -t @ -k2 <( sed 's/,/@/' abc.csv ) ) \
<( sort -t @ -k2 <( sed 's/,/@/' xyz.csv ) ) | sed 's/@/,/'
Com os dois arquivos
TBL_NAME,SANDBOX_NAME,SCRIPT_NAME
ccti_prod_attdnl_ext,abc_ext,101_ext_table.m_diag.pset
ccti_prod_attdnl_ext,abc_ids,101_ext_table.m_diag.pset
ccti_prod_attdnl_ext,xxx_ids,101_ext_table.m_diag.pset
( abc.csv
da pergunta, com abs
substituído por abc
e uma linha não correspondente adicionada) e
PID,SANDBOX_NAME,SCRIPT_NAME
11065,abc_ext,101_ext_table.m_diag.pset
11066,abc_ext,101_ext_table.m_diag.pset
11067,abc_ids,101_ext_table.m_diag.pset
( xyz.csv
da pergunta), isso produz
PID,SANDBOX_NAME,SCRIPT_NAME
11065,abc_ext,101_ext_table.m_diag.pset
11066,abc_ext,101_ext_table.m_diag.pset
11067,abc_ids,101_ext_table.m_diag.pset
NULL,xxx_ids,101_ext_table.m_diag.pset
O join
opera no resultado da substituição da primeira vírgula por @
(qualquer caractere não presente nos dados, pelo menos não no primeiro campo) e na classificação de cada arquivo de entrada no segundo @
-delimited campo (que são os dois últimos campos separados por vírgula). Ele gera o primeiro campo do primeiro arquivo e o segundo campo do segundo arquivo. Também adiciona as entradas não correspondentes do primeiro arquivo e substitui os campos vazios pela string NULL
.
O sed
no final substitui o @
por vírgulas.