Troncature des chaînes après l'exécution du script awk

Nov 23 2020

J'ai ce code

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

J'utilise le code de cette façon

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

J'ai deux fichiers texte

1 .txt

AA;BB;

2 .txt

CC;DD;BB;AA;

J'essaye de générer cette sortie 3 .txt

AA;BB;CC;DD;

mais avec ce script n'est pas possible car ce script renvoie uniquement AA;BB;

logique: ce qui précède utilise simplement des chaînes littérales dans une recherche de hachage d'index de tableau, donc peu importe les caractères que vous avez dans votre entrée. Cependant, à propos de l'exemple de sortie:
si dans 2 .txt il y a des champs communs également dans 1 .txt.Par exemple, BB;AA;vous devez les concaténer sur une seule ligne, c'est-à-dire que la AA;BB;CC;DD;commande n'est pas requise, par exemple n'est pas pertinente si la sortie est BB;AA;DD;CC;
Seule condition qui est obligatoire est d'éviter les doublons mais mon script le fait déjà

Réponses

1 RavinderSingh13 Nov 23 2020 at 08:33

Pourriez-vous s'il vous plaît essayer de suivre, selon le commentaire d'OP, les deux fichiers n'ont qu'une ligne. Donc, en utilisant la pastecommande pour combiner les deux fichiers, puis en traitant sa sortie par awkcommande.

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=""
}'