包含文件中整数的行数

时间:2017-05-03 20:58:00

标签: linux bash unix awk integer

我试过了,但它没有用:

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

2 个答案:

答案 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++)) ; domanual)。就像现在一样,这是一个语法错误。即便如此,它仍然只会循环数字,而不会读取任何内容。有关如何阅读文件的信息,请参阅BashFAQ

if [[ $i == *"[0-9]* ]]; then

除了那里唯一的引用外,那是好的。

count1=count1+1;

这会将字符串count1+1分配给变量count1。您可能想在count1=$((count1 + 1))

使用Arithmetic expansion