我有一个列表文件
mike
jack
jack
mike
有时是(没有麦克风)
jack
jack
我想测试此文件是否只包含一个mike
或多个mike
,如下所示
if [list **only** contains one `mike` or multiple `mike`'s]
then
do something
else
echo jack(other's name) is using it
done
答案 0 :(得分:1)
bash
您可以使用while
循环read
来读取
while read line;
do
[ $line == "mike" ] && ((count=$count+1))
done < inputFile
$count
将在文件中包含mike
的计数。
$ echo $count
2
awk
$ awk '/mike/{count++}; END{print count}' input
2
答案 1 :(得分:1)
find_mike () {
mike_count=$(grep -c 'mike');
if (( mike_count == 1 )); then
printf 'I found only one mike.'
elif (( mike_count > 1 )); then
printf 'I found %d mikes.' "$mike_count"
else
printf '%s\n' "I have no idea where is mike";
fi
}
使用示例:
$ find_mike < input_file.txt
I found 2 mikes
答案 2 :(得分:1)
[ "$(sort inputfile | uniq)" = mike ]
对输入进行排序,然后删除所有相同的行。您需要对uniq
的输入进行排序,因为它仅适用于连续的相同行。
简短形式:
[ "$(sort --unique inputfile)" = mike ]
答案 3 :(得分:0)
grep -xvq mike inputfile
一旦找到不是mike
的内容,此命令就会以0退出。如果文件为空或仅包含(任意数量)mike
行,则以1退出。
grep
非常非常快。它会尽快解析输入文件。
您可能希望通过在命令前添加感叹号来反转退出值。