计算bash中的列数

Nic*_*ick 36 bash row

假设我有一个包含许多行和多列的大文件.我想知道我使用bash有多少行和列.

Eri*_*rik 64

列: awk '{print NF}' file | sort -nu | tail -n 1

使用head -n 1的最低列数,tail -n 1为最高列数.

行:cat file | wc -lwc -l < fileUUOC人群.

  • 不需要排序或尾巴,只需在awk中执行:awk'{if(NF> max)max = NF} END {print max}' (6认同)
  • @Joy:`awk -F'\t''{print NF}'文件| 排序-nu | tail -n 1` 使用制表符作为分隔符 (2认同)

小智 7

或者对count列进行计数,计算列之间的分隔符.我发现这是一个简洁和易于记忆的良好平衡.当然,如果您的数据包含列分隔符,这将不起作用.

head -n1 myfile.txt | grep -o " " | wc -l
Run Code Online (Sandbox Code Playgroud)

用于head -n1获取文件的第一行.用于grep -o计算所有空间,并输出在新行上找到的每个空格.用于wc -l计算行数.

  • CSV 中的列计数将为 `head -n1 myfile.txt | grep -o“,”| wc -l` + 1 因为 grep 正在计算逗号(或任何其他列分隔符)的数量,但列数将比该数多 1。 (2认同)

Fat*_*gol 7

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)


San*_*Haq 6

对于行,您可以简单地使用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”将起作用。

  • 或者只是'awk'{print NF; 退出}'。 (2认同)