我试过了,但它没有用:
count1=0;
count2=0;
for n in $*
do
for(i=1;i<='wc -l <$n';i++) do
if [[ $i == *"[0-9]* ]]; then
count1=count1+1;
else
count2=count2+1;
fi
done
done
count1用于包含整数的行,而count2用于不包含整数的行。
输入:
yes 145 10
no no
10 20
输出:
count1=2, count2=1
答案 0 :(得分:2)
使用grep -c
计算与正则表达式匹配的行数。使用-v
选项计算不匹配的行。
count1=$(grep -c "[0-9]" "$@")
count2=$(grep -v -c "[0-9]" "$@")
答案 1 :(得分:0)
for n in $*
要循环显示位置参数,请使用"$@"
(带引号)而不是$*
。前者实际上使用包含空格的参数(参见the manual)。
for(i=1;i<='wc -l <$n';i++) do
这应该是for ((i=1;i <= $(wc -l < $n); i++)) ; do
(manual)。就像现在一样,这是一个语法错误。即便如此,它仍然只会循环数字,而不会读取任何内容。有关如何阅读文件的信息,请参阅BashFAQ。
if [[ $i == *"[0-9]* ]]; then
除了那里唯一的引用外,那是好的。
count1=count1+1;
这会将字符串count1+1
分配给变量count1
。您可能想在count1=$((count1 + 1))