Truncamento de strings após a execução de um script awk

Nov 23 2020

Eu tenho esse código

BEGIN { FS=OFS=";" }
{ key = $(NF-1) } NR == FNR { for (i=1; i<(NF-1); i++) { if ( !seen[key,$i]++ ) {
            map[key] = (key in map ? map[key] OFS : "") $i } } next } { print $0 map[key] }

Eu uso o código desta forma

awk -f tst.awk 2.txt 1.txt

Eu tenho dois arquivos de texto

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

Tento gerar esta saída 3 .txt

AA;BB;CC;DD;

mas com este script não é possível porque este script retorna apenas AA;BB;

lógica: o acima apenas usa strings literais em uma pesquisa hash de índices de array, portanto, não importa quais caracteres você tem em sua entrada. No entanto, sobre a saída de amostra:
se em 2 .txt houver campos comuns também em 1 .txt . Por exemplo, BB;AA;então você precisa concatená-los em uma única linha, ou seja, a AA;BB;CC;DD;ordenação não é necessária, por exemplo, não é relevante se a saída for A BB;AA;DD;CC;
única condição que é obrigatório é evitar duplicatas, mas meu script já faz isso

Respostas

1 RavinderSingh13 Nov 23 2020 at 08:33

Você poderia tentar seguir, de acordo com o comentário de OP, ambos os arquivos têm apenas 1 linha. Portanto, use o pastecomando para combinar os arquivos e, em seguida, processe sua saída por meio do awkcomando.

paste -d';' 1.txt 2.txt | 
awk '
BEGIN{
  FS=OFS=";"
}
{
  for(i=1;i<=NF;i++){
    if(!seen[$i]++){ val=(val?val OFS:"")$i }
  }
  print val
  delete seen
  val=""
}'