Troncamento delle stringhe dopo l'esecuzione di awk script

Nov 23 2020

Ho questo codice

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] }

Uso il codice in questo modo

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

Ho due file di testo

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

Provo a generare questo output 3 .txt

AA;BB;CC;DD;

ma con questo script non è possibile perché questo script restituisce solo AA;BB;

logica: quanto sopra utilizza solo stringhe letterali in una ricerca hash di indici di array, quindi non si preoccupa di quali caratteri hai nel tuo input. Tuttavia sull'output di esempio:
se in 2 .txt sono presenti campi comuni anche in 1 .txt. Ad esempio, BB;AA;è necessario concatenarli in una singola riga, ovvero l' AA;BB;CC;DD;ordinamento non è richiesto, ad esempio non è rilevante se l'output è BB;AA;DD;CC;
Only condition that is obbligatorio è evitare i duplicati ma il mio script lo fa già

Risposte

1 RavinderSingh13 Nov 23 2020 at 08:33

Potresti provare a seguire, come da commento di OP entrambi i file hanno solo 1 riga. Quindi utilizzando il pastecomando per combinare entrambi i file e quindi elaborarne l'output tramite 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=""
}'