给定一个包含这样数据的文件(即stores.dat文件)
sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200
输出列名数的命令是什么?
即。在上面的示例中,它将是4.(管道字符数+第一行中的1)
我在想这样的事情:
awk '{ FS = "|" } ; { print NF}' stores.dat
但它返回所有行而不是第一行,而第一行则返回1而不是4
答案 0 :(得分:95)
awk -F'|' '{print NF; exit}' stores.dat
在第一行之后立即退出。
答案 1 :(得分:34)
这是一种解决方法(对我来说:我不经常使用awk):
显示包含数据的文件的第一行,用换行符替换所有管道,然后计算行数:
$ head -1 stores.dat | tr '|' '\n' | wc -l
答案 2 :(得分:11)
除非您在那里使用空格,否则您应该可以在第一行使用| wc -w
。
wc
是“字数统计”,它只计算输入文件中的单词。如果您只发送一行,它会告诉您列数。
答案 3 :(得分:4)
你可以尝试
cat FILE | awk'{print NF}'
答案 4 :(得分:1)
如果您安装了python,可以尝试:
python -c 'import sys;f=open(sys.argv[1]);print len(f.readline().split("|"))' \
stores.dat
答案 5 :(得分:1)
这通常用于计算字段数:
head -n 1 file.name | awk -F'|' '{print NF; exit}'
答案 6 :(得分:0)
基于Cat Kerr响应。 此命令正在使用solaris
awk '{print NF; exit}' stores.dat
答案 7 :(得分:0)
head -1 stores.dat | grep -o \| | wc -l
答案 8 :(得分:0)
选择文件中的任何行(在下面的示例中,它是第2行)并计算列数,其中分隔符是空格:
sed -n 2p text_file.dat | tr ' ' '\n' | wc -l
答案 9 :(得分:0)
在bash下,您可以简单地:
IFS=\| read -ra headline <stores.dat
echo ${#headline[@]}
4
与不带分叉一样快得多,并且可以像$headline
这样重用,保持完整标题。您可以,例如:
printf " - %s\n" "${headline[@]}"
- sid
- storeNo
- latitude
- longitude
注意。此语法将正确驱动列名中的空格和其他字符。
如果某行包含一些额外的列怎么办?
此命令将搜索较大的行,并计算分隔符:
tr -dc $'\n|' <stores.dat |wc -L
3
最多有3个分隔符,然后是4个字段。