Ответ 1
Вы можете попробовать использовать uniq man uniq
и сделать следующее
sort file | uniq -u | wc -l
Я абсолютно новичок в bash, поэтому вот моя проблема:
Любое количество строк текста дается со стандартного ввода.
Выход: количество не повторяющихся строк.
Например:
INPUT:
Она носит черные туфли.
Меня зовут Джонни.
Я ненавижу понедельник.
Меня зовут Джонни.
Я тебя не понимаю.
Она носит черные туфли.
ВЫВОД:
2
Вы можете попробовать использовать uniq man uniq
и сделать следующее
sort file | uniq -u | wc -l
Вот как я решил проблему:
... | awk '{n[$0]++} END {for (line in n) if (n[line]==1) num++; print num}'
Но это довольно непрозрачно. Здесь (слегка) более четкий способ взглянуть на него (требуется bash версия 4)
... | {
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 count is only 1
num=0
for c in "${count[@]}"; do
if (( $c == 1 )); then
(( num++ ))
fi
done
echo $num
}