openclassroom - if bash



Supprimer les entrées en double à l'aide d'un script Bash (3)

Cette question a déjà une réponse ici:

Je souhaite supprimer les doublons d'un fichier texte, par exemple:

kavitha= Tue Feb    20 14:00 19 IST 2012  (duplicate entry) 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012 
kavitha= Tue Feb    20 14:00 19 IST 2012 (duplicate entry) 

Est-il possible de supprimer les entrées en double à l'aide d'un script Bash?

Sortie désirée

kavitha= Tue Feb    20 14:00 19 IST 2012 
sree=Tue Jan  20 14:05 19 IST 2012  
divya = Tue Jan  20 14:20 19 IST 2012  
anusha=Tue Jan 20 14:45 19 IST 2012

https://src-bin.com


Answer #1

Cela pourrait fonctionner pour vous:

cat -n file.txt |
sort -u -k2,7 |
sort -n |
sed 's/.*\t/    /;s/\([0-9]\{4\}\).*/\1/'

ou ca:

 awk '{line=substr($0,1,match($0,/[0-9][0-9][0-9][0-9]/)+3);sub(/^/,"    ",line);if(!dup[line]++)print line}' file.txt

Answer #2

Il supprime les lignes consécutives dupliquées d'un fichier (émule "uniq").
La première ligne d'un ensemble de lignes en double est conservée, les autres sont supprimées.

sed '$!N; /^\(.*\)\n\1$/!P; D'

Answer #3

Vous pouvez sort ensuite uniq :

$ sort -u input.txt

Ou utilisez awk :

$ awk '!a[$0]++' input.txt




shell