如何计算csv文件头中的列数?

时间:2014-11-18 13:40:37

标签: linux bash

我需要计算CSV文件中标题列的数量,例如

名为test.csv

的文件
a,b,c,d 
1,1,1,1
2,2,2,2
.......
n,n,n,n

应该给我4列。如果我这样做:

awk -F, '{print NF}' ./test.csv

我将获得4次但是n次,即我将获得与所有行数相同的列数,并且它不是真正有效的。我尝试了这种替代形式但由于需要输入文件而无法工作:

awk -F, '{print NF}' `head -n 1 ./test.csv`

我可以使用这个替代方案,但我发现创建一个tmp文件很难看:

head -n 1 ./test.csv > tmp && awk -F, '{print NF}' tmp && rm tmp

有更简单的方法吗?

3 个答案:

答案 0 :(得分:7)

只需打印NF然后退出。

awk -F, '{print NF; exit}' file.csv

应该指出,对于任意csv,这是安全,因为csv可以引用元素中的逗号,而awk将无法正确处理它。

答案 1 :(得分:1)

如果您确定始终使用相同数量的列,请仅为第一行打印NF

awk -F, 'NR==1{print NF}' ./test.csv

您也可以使用head而不使用临时文件:

awk -F, '{print NF}' <(head -1 f)
head -1 f |awk -F, '{print NF}'

答案 2 :(得分:1)

你可以用头来做这件事。只需翻转你周围的东西,然后将它管道输入awk。

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