小智 7
或者对count列进行计数,计算列之间的分隔符.我发现这是一个简洁和易于记忆的良好平衡.当然,如果您的数据包含列分隔符,这将不起作用.
head -n1 myfile.txt | grep -o " " | wc -l
Run Code Online (Sandbox Code Playgroud)
用于head -n1获取文件的第一行.用于grep -o计算所有空间,并输出在新行上找到的每个空格.用于wc -l计算行数.
kirill_igum 的答案稍有改动,您可以轻松计算您想要的任何特定行的列数,这就是我提出这个问题的原因,即使该问题要求的是整个文件。(虽然如果您的文件在每一行中都有相同的列,这当然也仍然有效):
head -2 file |tail -1 |tr '\t' '\n' |wc -l
Run Code Online (Sandbox Code Playgroud)
给出第 2 行的列数。例如用 55 替换 2 以获得第 55 行的列数。
-bash-4.2$ cat file
1 2 3
1 2 3 4
1 2
1 2 3 4 5
-bash-4.2$ head -1 file |tail -1 |tr '\t' '\n' |wc -l
3
-bash-4.2$ head -4 file |tail -1 |tr '\t' '\n' |wc -l
5
Run Code Online (Sandbox Code Playgroud)
如果您的文件由制表符分隔,则上面的代码有效,因为我们将其定义为“tr”。如果您的文件有另一个分隔符,比如逗号,您仍然可以使用相同的技巧通过简单地将分隔符“t”更改为“,”来计算“列”:
-bash-4.2$ cat csvfile
1,2,3,4
1,2
1,2,3,4,5
-bash-4.2$ head -2 csvfile |tail -1 |tr '\,' '\n' |wc -l
2
Run Code Online (Sandbox Code Playgroud)
对于行,您可以简单地使用wc -l file
-l代表总行
对于列,您可以简单地使用head -1 file | tr ";" "\n" | wc -l
解释
head -1 file
抓取文件的第一行,这应该是标题,并通过管道将其发送到下一个cmd
| tr ";" "\n"
tr代表翻译。
它将把所有;字符转换为换行符。
在此示例中;是您的分隔符。
然后它将数据发送到下一个命令。
wc -l
计算总行数。
小智 5
如果文件很大,但可以确定每一行的列数保持不变(并且没有标题),请使用:
head -n 1 FILE | awk '{print NF}'
Run Code Online (Sandbox Code Playgroud)
查找列数,其中FILE是您的文件名。
为了找到行数,“ wc -l FILE”将起作用。