Comparer les en-têtes de deux fichiers texte délimités

File1.txt (fichier de base)

header1|header2|header3|header4 1|2|3|4 

File2.txt

 header1|header10|header3|header4 5|6|7 

O / P désiré

header2 est manquant dans le fichier 2 à la position 2

header10 est l’addition dans le fichier 2 à la position 2

Je dois comparer deux en-têtes de fichiers et afficher les colonnes d’en-tête ou d’addition manquantes par rapport à la liste d’en-têtes du fichier de base.

Vous pouvez utiliser awk , comme ceci:

check.awk

 # In the first line of every input file save the headers FNR==1{ headers[f++]=$0 } # Once all lines of input have been processed ... END{ # split() returns the number of items. The resulting # arrays 'a|b_headers' will be indexed starting from 1 lena = split(headers[0],a_headers,"|") lenb = split(headers[1],b_headers,"|") for(h=1;h<=lena;h++) { if(a_headers[h] != b_headers[h]) { print a_headers[h] " missing from file2 at column " h } } for(h=1;h<=lenb;h++) { if(b_headers[h] != a_headers[h]) { print b_headers[h] " missing from file1 at column " h } } } 

Appelez-le comme ceci:

 awk -f check.awk File1.txt File2.txt 

Sortie:

 header2 missing from file2 at column 2 header10 missing from file1 at column 2 

Je voudrais l’essayer avec la commande diff comme ceci:

 diff <(head -n1 fh1.txt | tr "|" "\n") <( head -n1 fh2.txt | tr "|" "\n") 

où fh1.txt et fh2.txt sont vos fichiers. La sortie donne les informations que vous voulez, mais elles ne sont pas très détaillées.