Подтвердить что ты не робот

Уникальные строки в bash

Я абсолютно новичок в bash, поэтому вот моя проблема:
Любое количество строк текста дается со стандартного ввода.
Выход: количество не повторяющихся строк.

Например:
INPUT:

Она носит черные туфли.
Меня зовут Джонни.
Я ненавижу понедельник.
Меня зовут Джонни.
Я тебя не понимаю.
Она носит черные туфли.

ВЫВОД:

2

4b9b3361

Ответ 1

Вы можете попробовать использовать uniq man uniq и сделать следующее

sort file | uniq -u | wc -l

Ответ 2

Вот как я решил проблему:

... | 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
}