unix – 文件中的列数

给定一个像这样的数据文件(即stores.dat文件)

sid|storeNo|latitude|longitude 2|1|-28.03720000|153.42921670 9|2|-33.85090000|151.03274200 

什么是一个命令来输出列名的数量?

即在上面的例子中,它将是4.(第一行中的pipe道字符数+1)

我在想像这样的东西:

 awk '{ FS = "|" } ; { print NF}' stores.dat 

但它会返回所有的行而不是第一行,而第一行则返回1而不是4

 awk -F'|' '{print NF; exit}' stores.dat 

刚刚在第一行之后退出。

这是一个解决方法(对我来说:我不经常使用awk):

显示包含数据的文件的第一行,用换行符replace所有pipe道,然后计算行数:

 $ head -1 stores.dat | tr '|' '\n' | wc -l 

除非你在那里使用空格,否则你应该可以使用| wc -w | wc -w在第一行。

wc是“字数”,它只是对input文件中的字进行计数。 如果你只发送一行,它会告诉你列的数量。

你可以试试

猫FILE | awk'{print NF}'

如果你安装了python,你可以尝试:

 python -c 'import sys;f=open(sys.argv[1]);print len(f.readline().split("|"))' \ stores.dat 

这通常是我用来计算字段数的:

 head -n 1 file.name | awk -F'|' '{print NF; exit}' 

类似于Mat的awk解决scheme的Perl解决scheme:

 perl -F'\|' -lane 'print $#F+1; exit' stores.dat 

我已经testing了1000000列的文件。


如果字段分隔符是空格(一个或多个空格或制表符)而不是pipe道:

 perl -lane 'print $#F+1; exit' stores.dat 

基于猫克尔响应。 这个命令在solaris上工作

 awk '{print NF; exit}' stores.dat 

你可以尝试:

 head -1 stores.dat | grep -o \| | wc -l 

select文件中的任何一行(在下面的例子中,它是第二行)并计算分隔符是空格的列的数量:

 sed -n 2p text_file.dat | tr ' ' '\n' | wc -l