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
- même après avoir mis FS comme une virgule, awk est également considéré comme de l’espace pour FS
- tandis que la boucle se termine après l’appel d’une fonction
- Commande introuvable en comparaison elif> bash
- Comment sélectionner “égal à / plus récent que” les fichiers en fonction de l’heure saisie dans Solaris / Shell
- Vérifier les processus exécutés par cronjob pour éviter les exécutions multiples
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.