bash中的独特线条

时间:2013-05-01 22:34:38

标签: bash shell unique lines

我绝对是bash的新手,所以这是我的问题:
从标准输入中提供任意数量的文本行 输出:非重复行数
例如:
INPUT:

  

她穿着黑色的鞋子   我的名字是Johny   我讨厌星期一   我的名字是Johny   我不明白你。
  她穿着黑色的鞋子。

输出:

  

2

2 个答案:

答案 0 :(得分:92)

您可以尝试使用uniq man uniq并执行以下操作

sort file | uniq -u | wc -l

答案 1 :(得分:8)

以下是我如何解决问题:

... | 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's count is only 1        
    num=0
    for c in "${count[@]}"; do
        if (( $c == 1 )); then
            (( num++ ))
        fi
    done

    echo $num
}