Je suis absolument novice en bash, voici donc mon problème:
Un nombre quelconque de lignes de texte est fourni à partir de l'entrée standard.
Sortie: nombre de lignes non répétitives.
Par exemple:
CONTRIBUTION:
Elle porte des chaussures noires.
Je m'appelle Johny.
Je déteste le lundi.
Je m'appelle Johny.
Je ne vous comprends pas.
Elle porte des chaussures noires.
SORTIE:
2
Vous pouvez essayer d'utiliser uniq man uniq
et procédez comme suit
sort file | uniq -u | wc -l
Voici comment je résoudrais le problème:
... | awk '{n[$0]++} END {for (line in n) if (n[line]==1) num++; print num}'
Mais c'est assez opaque. Voici un (légèrement) moyen plus lisible de le voir (nécessite la version 4 de bash)
... | {
declare -A count # count is an associative array
# iterate over each line of the input
# accumulate the number of times we've seen this line
#
# the construct "IFS= read -r line" ensures we capture the line exactly
while IFS= read -r line; do
(( count["$line"]++ ))
done
# now add up the number of lines who's count is only 1
num=0
for c in "${count[@]}"; do
if (( $c == 1 )); then
(( num++ ))
fi
done
echo $num
}