2011-10-12 193 views
3

我有一个简单的问题需要解决。计算文件中每行的分隔符数量。shell脚本:while read line没有这样的文件或目录

这里是我的示例文件:

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 

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

+0

有了'bash',就能避免'echo'在使用''<<<操作格雷格Hewgill的回答是:'用sed的/ [^,] // g'<<<“$ line”| wc -c“,如果这只是你所做的,你甚至不需要捕获和回显输出。 –

回答

4

你问sed读取由该名称的文件。请尝试发送您的输入sed的标准输入:

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

这工作很好。我非常感谢你的快速回复。 – dave

+0

很高兴我能帮到你。不要忘了,通过点击答案左边的复选框来“接受”最能帮助你的答案(这可以帮助其他人清楚地显示你的问题的最佳答案)。欢迎来到堆栈溢出! –

2

用awk:

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

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

1

我喜欢Michał Šrajer's awk answer。如果你使用bash,你可以这样做是正确的外壳:

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

不错。这些代码行也起作用。谢谢 – dave

相关问题