私は絶対にbashの初心者ですので、ここに私の問題があります:
任意の数のテキスト行が標準入力から提供されます。
出力:非繰り返し行の数。
例えば:
入力:
彼女は黒い靴を履いています。
私の名前はジョニーです。
私は月曜日が嫌いです。
私の名前はジョニーです。
わかりません。
彼女は黒い靴を履いています。
出力:
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}'
しかし、それはかなり不透明です。これは(slightly)より見やすい方法です(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
}