Troncature des chaînes après l'exécution du script awk
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
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 paste
commande pour combiner les deux fichiers, puis en traitant sa sortie par awk
commande.
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=""
}'