在bash中用逗号计算逗号

Stu*_*ard 13 bash shell

有时我会收到一个CSV文件,它在单元格内有一个回车符.对于将其用作输入的程序,这不是可接受的格式.

为了检测输入行是否被拆分,我确定坏行不会有预期的逗号数.是否有bash或其他常见的unix命令行工具,可以让我计算行中的逗号?如果有必要,我可以编写一个Python或Perl程序来执行此操作,但是如果可能的话,我想在现有的bash脚本中添加一行或两行,如果逗号计数错误则导致它失败.有任何想法吗?

lan*_*nzz 41

除了逗号之外的所有内容,然后计算剩下的字符数:

$ echo foo,bar,baz | tr -cd , | wc -c
2
Run Code Online (Sandbox Code Playgroud)

  • 这假设您正在回显该行,而不是文件,对吧?`echo "foo,bar,baz\nbaz,foo,foobar,bar" | tr-cd , | wc -c` 生成“5”,而不是“2”和“3”。 (2认同)

Mar*_*cus 9

比其他解决方案对我来说更有效的是这个。如果test.txt有:

foo,bar,baz
baz,foo,foobar,bar
Run Code Online (Sandbox Code Playgroud)

然后cat test.txt | xargs -I % sh -c 'echo % | tr -cd , | wc -c'产生

2
3
Run Code Online (Sandbox Code Playgroud)

这对于流源或尾部日志等非常有效。


Jon*_*Lin 5

要计算逗号出现的次数,您可以使用类似awk的内容:

string=(line of input from CSV file)
echo "$string" | awk -F "," '{print NF-1}'
Run Code Online (Sandbox Code Playgroud)

但这确实不足以确定一个领域是否有回车.字段可以在内部使用逗号,只要它们被引号括起来.


Pau*_*ce. 5

在纯 Bash 中:

while IFS=, read -ra array
do
    echo "$((${#array[@]} - 1))"
done < inputfile
Run Code Online (Sandbox Code Playgroud)

或者

while read -r line
do
    count=${line//[^,]}
    echo "${#count}"
done < inputfile
Run Code Online (Sandbox Code Playgroud)