J’ai un fichier le contient
apple apple banana orange apple orange
Je veux un script qui trouve les doublons Apple et Orange et indique à l’utilisateur que: Apple et Orange sont répétés. j’ai essayé
nawk '!x[$1]++' FS="," filename
pour trouver des éléments répétés, comment puis-je les imprimer dans unix bash?
Pour imprimer les lignes en double, vous pouvez dire:
$ sort filename | uniq -d apple orange
Si vous souhaitez également imprimer le compte, fournissez l’option -c
à uniq
:
$ sort filename | uniq -dc 3 apple 2 orange
+1 pour la réponse de devnul . Toutefois, si le fichier contient des espaces au lieu de nouvelles lignes en tant que délimiteur. alors ce qui suit fonctionnerait.
tr [:blank:] "\n" < filename | sort | uniq -d
Mettre à jour:
La question a été considérablement modifiée. Auparavant, lorsque vous répondiez à cela, le fichier d’entrée devrait ressembler à:
apple apple banana orange apple orange banana orange apple ...
Cependant, la solution fonctionnera de toute façon, mais pourrait être un peu trop compliquée pour ce cas particulier.
Le script awk suivant fera le travail:
awk '{i=1;while(i <= NF){a[$(i++)]++}}END{for(i in a){if(a[i]>1){print i,a[i]}}}' your.file
Sortie:
apple 3 orange 2
C’est plus compréhensible sous une forme comme celle-ci:
#!/usr/bin/awk { i=1; # iterate through every field while(i <= NF) { a[$(i++)]++; # count occurrences of every field } } # after all input lines have been read ... END { for(i in a) { # ... print those fields which occurred more than 1 time if(a[i] > 1) { print i,a[i]; } } }
Ensuite, rendez le fichier exécutable et exécutez-le en lui passant le nom du fichier d’entrée:
chmod +x script.awk ./script.awk your.file