J'ai un fichier de données composé de plusieurs lignes et colonnes avec des données numériques et chaîne. Certains modèles de chaîne et numériques sont répétés. J'ai besoin d'extraire le dernier motif répété. Par exemple;
715 ANKR PRN 1 value 1
760 ISTA PRN 2 value 2
715 ANKR PRN 1 value 3
760 ISTA PRN 2 value 4
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
1 ANKR PRN 7 value 8
2 ISTA PRN 7 value 9
1 ANKR PRN 7 value 10
3 ISTA PRN 7 value 11
1 ANKR PRN 7 value 12
dans cet exemple, "715 ANKR PRN 1", "760 ISTA PRN 2" et "1 ANKR PRN 7" sont répétés 3 fois dans le fichier de données. Je dois extraire les derniers motifs répétés et trier comme suit;
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
1 ANKR PRN 7 value 12
Avec les outils standard, sort
, rev
, uniq
:
% sort -k1,5 -k6,6nr file.txt | rev | uniq -f1 -d | rev
1 ANKR PRN 7 value 12
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
Si vous souhaitez trier la sortie comme vous le souhaitez:
% sort -k1,5 -k6,6nr file.txt | rev | uniq -f1 -d | rev | sort -k6,6n
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
1 ANKR PRN 7 value 12
Que diriez-vous
awk '{a[$1 FS $2 FS $3 FS $4 FS $5] = $6; c[$1 FS $2 FS $3 FS $4 FS $5]++}; END{for (i in a) {if (c[i]>1) print i,a[i]}}'
Tester avec votre entrée
$ awk '{a[$1 FS $2 FS $3 FS $4 FS $5] = $6; c[$1 FS $2 FS $3 FS $4 FS $5]++}; END{for (i in a) {if (c[i]>1) print i,a[i]}}' file
715 ANKR PRN 1 value 5
760 ISTA PRN 2 value 6
1 ANKR PRN 7 value 12