shell脚本:while read line没有这样的文件或目录

时间:2011-10-12 18:50:54

标签: shell

我有一个简单的问题需要解决。计算文件中每行的分隔符数。

这是我的示例文件:

4489201,6421,,,
4619802,4276

我想计算每行中有多少逗号。我在读取行脚本时写了这个,但是一直收到错误“没有这样的文件或目录”

#!/bin/bash
data_file="$1"

while read line
do 
    delimiter_cnt=`sed 's/[^,]//g' $line | wc -c`

echo "delimiter_cnt"
done < $data_file

错误消息是:

sed: can't read 4489201,6421,,,,,,,,,: No such file or directory
0
sed: can't read 4619802,4276,,,,,,,,,: No such file or directory
0

我真的很感谢你的帮助。提前致谢。

3 个答案:

答案 0 :(得分:4)

您要求sed按该名称读取文件。尝试将您的输入发送到sed的stdin:

delimiter_cnt=`echo $line | sed 's/[^,]//g' | wc -c`

答案 1 :(得分:2)

使用awk:

awk -F, '{print NF-1}' < input_file

-F,说awk,使用,作为字段分隔符,然后为每行打印NF-1值。 NFawk中当前记录的多个字段。

答案 2 :(得分:1)

我喜欢Michał Šrajer's awk answer。如果你使用bash,你可以直接在shell中执行:

while read line; do
    commas=${line//[^,]/}
    echo ${#commas}
done < filename