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