我需要计算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
有更简单的方法吗?
答案 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}'