web-dev-qa-db-fra.com

Utilisation de grep et recherche d'occurrences uniques

J'ai un fichier texte de ce type et je rechercherais toutes les lignes contenant la chaîne Validating Classification, puis obtenez uniquement les erreurs signalées. Je ne connais pas les types d'erreurs possibles.

Fichier d'entrée:

201600415 10:40 Error Validating Classification: error1
201600415 10:41 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3
201600415 10:44 Error Validating Classification: error3

Fichier de sortie

201600415 10:40 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3

Puis-je y parvenir en utilisant grep, des tuyaux et d'autres commandes?

20
user3065205

Vous devrez supprimer les horodatages, mais 'grep' et 'sort --unique' ensemble peuvent le faire pour vous.

grep --only-matching 'Validating Classification.*' | sort --unique

Donc grep -o n'affichera que les parties de la ligne qui correspondent à votre expression régulière (c'est pourquoi vous devez inclure le .* pour tout inclure après la correspondance "Validation de la classification"). Ensuite, une fois que vous avez juste la liste des erreurs, vous pouvez utiliser sort -u pour obtenir uniquement la liste unique des erreurs.

38
user4443

Vous pouvez utiliser cette commande en supposant vos données dans le test de fichier

uniq -f 2 <test
7
Marko

J'irais avec awk

awk -F: '{ if (!a[$3]++ ) print ;}' file
  • -F: utiliser: comme séparateur
  • $3 est le modèle après :
  • !a[$3]++ assurez-vous d'être vrai uniquement lors de la première occurrence
1
Archemar