我绝对是bash的新手,所以这是我的问题:
从标准输入中提供任意数量的文本行
输出:非重复行数
例如:
INPUT:
她穿着黑色的鞋子 我的名字是Johny 我讨厌星期一 我的名字是Johny 我不明白你。
她穿着黑色的鞋子。
输出:
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
}