2017-10-08 95 views
1

这就是我的代码的工作原理,我已经给出了计算字符而不是行,因为换行符不见了。wc -c计算错误的字符数unix

原始文件有

A,0,0,0,21,36,12,0,0,0,17.2,34,18,17.2,30.5,96,126,517,2399,2,111.83,38.583,111,1,0,0,0,0,0,0 

csv文件有一组数据,我只是计算列数。它的逗号数只有相同的列数。我删除了换行符,所以我不能使用wc -l,所以我尝试使用wc -c或-m,它们返回相同的值。但是,它计算了N + 1的值。

!head -1 ~/where/my/data/is/at.csv | sed 's/[^,]//g' | cat -E 

returns [',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$'] 

如果只是算逗号在这里,它是30,但是当我做wc -c,它将返回31

应该给我30的实例,但它给了我31.因此,n值+1。我想要如何解决这些问题,当时wc并没有把事情计算正确。

+0

能否请您发布样本INPUT_FILE和样品预计输出码的标签,因为它是不明确的。 – RavinderSingh13

+0

在你的示例中,我只看到29个逗号,而不是30或31 ...如果你发布样本行(或创建示例行)并告诉你需要什么作为输出,它会更有帮助...我们可以调试什么只显示输出?例如:'printf',,,,,,,,,,,,,,,,,,,,,,,,,,,,,'| wc -c'给出29 ...还有什么可以对此做的事情? – Sundeep

+0

我认为awk工作得很好,但我只是想知道wc如何在与awk在计算逗号相同的过程中工作。 – Mayjunejuly

回答

1

既然你感兴趣的计数的列数,你可以使用AWK此:

使用您的输入:

$ cat file 
A,0,0,0,21,36,12,0,0,0,17.2,34,18,17.2,30.5,96,126,517,2399,2,111.83,38.583,111,1,0,0,0,0,0,0 

给出:

$ awk -F, '{print NF}' file 
30 

如果你对逗号的数量感兴趣:

$ head -1 file | awk -F, '{print NF-1}' 
29 

顺便说一句,我想你试图拨打wc -m来计算字符。

+0

'cat -E'在每行的末尾显示'$'。显示您的csv摘录以提供更具体的答案。 –

+0

我理解使用awk来查找逗号的数量,但我实际上不明白为什么wc -m给了我N + 1的值,而awk实际上在给出预期的N值方面做了很好的工作? – Mayjunejuly

+0

你必须做一些不同的事情,因为'wc -m'返回'30'。你确定你不在'cat -E'之间的某个地方使用? –

4

wc -c将计数在cat之后添加到输出的换行符。

你可以试着管wc -lgrep -o命令将在多行输出中的逗号:

head -1 ~/where/my/data/is/at.csv | grep -o ',' | wc -l