0

如果我有一个 CSV 文件并且我想知道列数,我将使用以下命令:

  head -1 CSVFile.csv | sed 's/,/\t/g' | wc -w

但是,每当每列都有一个带有空格的列名时,该命令就不起作用并给我一个无意义的数字。

编辑此命令以使其提供正确的列数的方法是什么?

例如,在我的文件中,我可以有列名(t - ZK)(e - 22)

例如我的文件可能是(前 2 行);

 ZZ(v - 1),Tat(t - 1000)
 1.1240128401924,2929292929
4

5 回答 5

0

也许使用最后一行而不是第一行。将“头”改为“尾”。这将是一个快速、简单的解决方案。

于 2013-11-11T09:33:13.760 回答
0

假设标题名称中没有“,”(如 field1,“Surname,name”,field3,...)

sed "1 s/[^,]//g;q" CSVFile.csv | wc -c

也可以只在 sed 中制作,但对于计数来说有点重。

于 2013-11-11T12:05:39.807 回答
0

您正在通过管道将sed输出wc -w返回到输出中的单词数。因此,如果字段标题包含空格,则这些将被视为不同的单词。

您可以使用awk

head -1 CSVFile.csv | awk -F, '{print NF}'

这将返回文件中的列数(假设文件是​​逗号分隔的)。

于 2013-11-11T10:00:08.933 回答
0

尝试使用awk

awk -F, 'NR==1 {print NF; exit}' CSVFile.csv

如果您想使用head,sedwc

尝试使用sed替换分隔符作为换行符\n而不是制表符\t,然后使用计算行数wc -l而不是计算单词数wc -w

head -1 CSVFile.csv | sed 's/,/\n/g' | wc -l
于 2013-11-11T10:14:47.313 回答
0
perl -ane 'print scalar(@F)-1 if($.==1)' your_file
于 2013-11-11T10:24:18.983 回答