Awk 计算每列中的行数

Awk 计算每列中的行数,awk,printing,wc,Awk,Printing,Wc,是否可以计算文件每列中的行数?例如,我一直在尝试使用awk来分隔分号符号上的列,单独指定每一列,并使用us wc命令来统计该列中出现的任何和所有事件。 对于下面的命令,我试图在不计算空行的情况下查找第3列中的项目数。不幸的是,这个命令只对整个文件进行计数。我可以将列移动到另一个文件并计算该文件,但我只想知道是否有更快捷的方法 awk -F ';' '{print $3}' file.txt | wc -l 数据文件格式 ; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; ; 3 ; 4 ;

是否可以计算文件每列中的行数?例如,我一直在尝试使用awk来分隔分号符号上的列,单独指定每一列,并使用us wc命令来统计该列中出现的任何和所有事件。
对于下面的命令,我试图在不计算空行的情况下查找第3列中的项目数。不幸的是,这个命令只对整个文件进行计数。我可以将列移动到另一个文件并计算该文件,但我只想知道是否有更快捷的方法

awk -F ';' '{print $3}' file.txt | wc -l
数据文件格式

; 1 ; 2 ; 3 ; 4 ; 5 ; 6 ;  
; 3 ; 4 ; 5 ; 6 ;   ; 4 ;  
;   ; 3 ; 5 ; 6 ; 9 ; 8 ;  
; 1 ; 6 ; 3 ;   ;   ; 4 ;  
; 2 ; 3 ;   ; 3 ;   ; 5 ;  
需要示例输出

Column 1 = 4 aka(1 + 3 + 1 + 2)  
Column 2 = 5  
Column 3 = 4  
Colunm 4 = 4  
Column 5 = 2  
Column 6 = 5 

使用数组为每个字段保留单独的计数,然后在完成后打印总数:

$ awk -F' *; *' '{ for (i = 2; i < NF; ++i) if ($i != "") ++count[i] } 
  END { for (i = 2; i < NF; ++i) print "Column", i-1, "=", count[i] }' file
Column 1 = 4
Column 2 = 5
Column 3 = 4
Column 4 = 4
Column 5 = 2
Column 6 = 5

$i~/[^]/
等于
1
如果
i
th字段中存在任何非空格字符,则等于
0

使用数组为每个字段保留单独的计数,完成后打印总数:

$ awk -F' *; *' '{ for (i = 2; i < NF; ++i) if ($i != "") ++count[i] } 
  END { for (i = 2; i < NF; ++i) print "Column", i-1, "=", count[i] }' file
Column 1 = 4
Column 2 = 5
Column 3 = 4
Column 4 = 4
Column 5 = 2
Column 6 = 5

$i~/[^]/
等于
1
如果
i
th字段中存在任何非空格字符,
0
否则。

提示:使用列号作为索引的数组,然后在
END
块中打印结果这里有一个类似的问题:-您只需要更改计数方式。

提示:使用列号作为索引的数组,然后在
END
块中打印结果这里有一个类似的问题:-您只需要改变你的计算方式。很好的解决方案,但我相信如果你做
count[I]+=($I!=”)
@kvantour谢谢,我编辑添加了一个基于类似原理的替代方案。很好的解决方案,但我相信如果你做
count[I]+=($I!=”)
@kvantour谢谢,我编辑添加了一个基于类似原则的替代方案。