unix - 文件中的列数
给定一个包含这样的数据的文件(即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
Given a file with data like this (i.e. stores.dat file)
sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200
What would be a command to output the number of column names?
i.e. In the example above it would be 4. (number of pipe characters + 1 in the first line)
I was thinking something like:
awk '{ FS = "|" } ; { print NF}' stores.dat
but it returns all lines instead of just the first and for the first line it returns 1 instead of 4
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
在第一行之后就退出。
Just quit right after the first line.
这是一种解决方法(对我来说:我不经常使用 awk):
显示包含数据的文件的第一行,用换行符替换所有管道,然后计算行数:
This is a workaround (for me: I don't use awk very often):
Display the first row of the file containing the data, replace all pipes with newlines and then count the lines:
除非您在那里使用空格,否则您应该能够使用
| wc -w 在第一行。
wc
是“Word Count”,它只是对输入文件中的单词进行计数。如果您只发送一行,它会告诉您列数。Unless you're using spaces in there, you should be able to use
| wc -w
on the first line.wc
is "Word Count", which simply counts the words in the input file. If you send only one line, it'll tell you the amount of columns.你可以尝试
You could try
Perl 解决方案类似于 Mat 的 awk 解决方案:
我已经在具有 1000000 列的文件上对此进行了测试。
如果字段分隔符是空格(一个或多个空格或制表符)而不是竖线:
Perl solution similar to Mat's awk solution:
I've tested this on a file with 1000000 columns.
If the field separator is whitespace (one or more spaces or tabs) instead of a pipe:
选择文件中的任意行(在下面的示例中,它是第二行)并计算列数,其中分隔符是空格:
select any row in the file (in the example below, it's the 2nd row) and count the number of columns, where the delimiter is a space:
如果你安装了 python 你可以尝试:
If you have python installed you could try:
这通常是我用来计算字段数量的方法:
This is usually what I use for counting the number of fields:
正确的纯 bash 方式
简单地计算
bash 下 文件中的列,您可以简单地:
没有分叉,速度更快,并且可以重复使用,因为
$headline
保留完整的标题行。例如,您可以:Nota 此语法将正确驱动列名称中的空格和其他字符。
替代方案:对每行上的最大列进行强二进制检查
如果某些行确实包含一些额外的列怎么办?
此命令将搜索更大的行,计算分隔符:
计算 CSV 文件中的列数
在 bash 下,您可以使用csv可加载插件:
有关详细信息,请参阅如何在 Bash 中解析 CSV 文件?。
\n|' <stores.dat |wc -L 3如果最多有
3
分隔符,则有4
个字段...或者如果您考虑:计算 CSV 文件中的列数
在 bash 下,您可以使用csv可加载插件:
有关详细信息,请参阅如何在 Bash 中解析 CSV 文件?。
Proper pure bash way
Simply counting columns in file
Under bash, you could simply:
A lot quicker as without forks, and reusable as
$headline
hold the full head line. You could, for sample:Nota This syntax will drive correctly spaces and others characters in column names.
Alternative: strong binary checking for max columns on each rows
What if some row do contain some extra columns?
This command will search for bigger line, counting separators:
Counting columns in a CSV file
Under bash, you may use csv loadable plugins:
For more infos, see How to parse a CSV file in Bash?.
\n|' <stores.dat |wc -L 3If there are max
3
separators, then there are4
fields... Or if you consider:Counting columns in a CSV file
Under bash, you may use csv loadable plugins:
For more infos, see How to parse a CSV file in Bash?.
基于 Cat Kerr 的回应。
该命令适用于solaris
Based on Cat Kerr response.
This command is working on solaris
你可以尝试:
you may try: