Arrays 使用linux/bash的列元素计数

Arrays 使用linux/bash的列元素计数,arrays,linux,bash,unix,scripting,Arrays,Linux,Bash,Unix,Scripting,我有许多以制表符分隔的文件,它们的数据有点像这样 Header1 Header2....... Headern Cat Bat mat pat Hat rat Rat [Not Applicable] [Not Available] [Not Applicable] 我需要获得每个标题的有效行数。 无效条目有[不可用]、[不适用]等。 我正在尝试获取数组

我有许多以制表符分隔的文件,它们的数据有点像这样

Header1               Header2....... Headern
Cat Bat                mat pat
Hat                     rat
Rat                  [Not Applicable]
[Not Available]      [Not Applicable]
我需要获得每个标题的有效行数。 无效条目有[不可用]、[不适用]等。 我正在尝试获取数组中的头元素。在这里之前一切都很好。
然而,我发现每一个头球都很难计数。我还使用数组来存储标题的行值。但问题是数组(不是作为一个不同的元素和可用的元素)存储为另一个元素。另外,对于第一个标题,“Cat Bat”应该是一个条目,但数组可能也存储了两个条目。

让我们从这个选项卡分隔的文件开始:

$ cat file
Header1         Header2
Cat Bat         mat pat
Hat             rat
Rat             [Not Applicable]
[Not Available] [Not Applicable]
对于每一列,以下统计不以
[非A
开头的条目:

$ awk -F'\t' 'NR==1{for (i=1;i<=NF;i++)h[i]=$i;next} {for (i=1;i<=NF;i++)c[i]+=($i !~ /[[]Not A/)} END{for (i=1;i<=NF;i++)print h[i],c[i]}' file
Header1 3
Header2 2

非常感谢!还有一个问题,如果一个以上类型的无效条目[unavailable],您将如何将其合并到上面的查询中?@user3025581 OK。我在命令中添加了
[unavailable]
。请参阅更新。
awk -F'\t' 'NR==1{for (i=1;i<=NF;i++)h[i]=$i;next} {for (i=1;i<=NF;i++)c[i]+=($i !~ /[[](Not A|unavailable)/)} END{for (i=1;i<=NF;i++)print h[i],c[i]}' file