wc -c计算错误的字符数unix

时间:2017-10-08 04:35:23

标签: awk sed

我的代码是如何工作的,我被赋予了计算字符而不是行数,因为换行符已经消失。

原始文件

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不计算正确的事情时。

2 个答案:

答案 0 :(得分:4)

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

您可以尝试将wc -l传递给grep -o命令,该命令会在多行中输出逗号:

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

答案 1 :(得分: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来计算角色。