Awk 计算一行中大于1的数字出现的次数

Awk 计算一行中大于1的数字出现的次数,awk,Awk,我有以下格式的表格。存在>500列和113行,其中column1是标识符。我只希望有那些90%以上的条目值大于1的标识符,即A1,如果90%以上的条目值大于1,我希望在最后一列中打印大于1的条目总数并保留它。有什么建议吗 Id M1 M2 M3 M4 M5 M6 A1 0.82 0.73 1.40 0.52 1.84 3.20 A2 14.44 23.73 55.27 68.77 14.18 0.05 A3 5.56 5.69 10.46 10.55 7.49 7.77 A4 1.06 3.62

我有以下格式的表格。存在>500列和113行,其中column1是标识符。我只希望有那些90%以上的条目值大于1的标识符,即A1,如果90%以上的条目值大于1,我希望在最后一列中打印大于1的条目总数并保留它。有什么建议吗

Id M1 M2 M3 M4 M5 M6
A1 0.82 0.73 1.40 0.52 1.84 3.20
A2 14.44 23.73 55.27 68.77 14.18 0.05
A3 5.56 5.69 10.46 10.55 7.49 7.77
A4 1.06 3.62 1.68 1.38 1.90 6.64
A5 0.01 0.00 0.03 0.01 0.00 0.07
A6 0.07 0.72 27.68 19.70 2.33 0.00
A7 5.57 8.95 18.71 6.75 16.76 33.66
A8 0.86 2.30 1.65 0.92 2.01 0.92
A9 20.21 25.59 25.86 21.62 26.75 24.66
A10 28.05 28.26 22.48 27.41 32.28 26.94
A110.22 0.83 7.39 5.88 2.05 9.27
A12 13.90 19.43 28.51 25.48 21.44 29.24
A13 15.43 18.39 12.49 14.75 15.79 10.85
A14 3.92 13.00 14.13 8.18 13.92 23.83
A15 0.06 0.02 0.01 0.01 0.04 0.03
A16 0.99 2.46 6.08 4.56 3.81 3.43
A17 1.31 2.05 3.18 1.73 2.80 4.12
A18 3.60 7.90 8.57 5.56 7.18 12.20
A19 44.82 47.53 37.16 42.20 41.51 26.33
A20 1.59 2.88 2.55 3.05 3.08 2.88

我的知识非常有限。我知道如何计算与此
awk'$0=$0OFS NF-1'FS=1.40的精确匹配,但不适用于较大或较小的条件

我主要希望输出为以下格式,其中最后一列指示条目数>1

Id M1 M2 M3 M4 M5 M6
A1 0.82 0.73 1.40 0.52 1.84 3.20 3 A2 14.44 23.73 55.27 68.77 14.18 0.05 5 A3 5.56 5.69 10.46 10.55 7.49 7.77 6 A4 1.06 3.62 1.68 1.38 1.90 6.64 6 A5 0.01 0.00 0.03 0.01 0.00 0.07 0 A6 0.07 0.72 27.68 19.70 2.33 0.00 3 A7 5.57 8.95 18.71 6.75 16.76 33.66 6 A8 0.86 2.30 1.65 0.92 2.01 0.92 3 A9 20.21 25.59 25.86 21.62 26.75 24.66 6 A10 28.05 28.26 22.48 27.41 32.28 26.94 6 A110.22 0.83 7.39 5.88 2.05 9.27 4 A12 13.90 19.43 28.51 25.48 21.44 29.24 6 A13 15.43 18.39 12.49 14.75 15.79 10.85 6 A14 3.92 13.00 14.13 8.18 13.92 23.83 6 A15 0.06 0.02 0.01 0.01 0.04 0.03 0 A16 0.99 2.46 6.08 4.56 3.81 3.43 5 A17 1.31 2.05 3.18 1.73 2.80 4.12 6 A18 3.60 7.90 8.57 5.56 7.18 12.20 6 A19 44.82 47.53 37.16 42.20 41.51 26.33 6 A20 1.59 2.88 2.55 3.05 3.08 2.88 6 < /代码>

<代码> $AWK { for(i=1;i1)C++;PrtTf“%-5s %s”,$i,(i=nf?OFS C ORS:OFS)} C=0 }文件 内径M1 M2 M3 M4 M5 M6 A1 0.82 0.73 1.40 0.52 1.84 3.20 3 A2 14.44 23.73 55.27 68.77 14.18 0.05 5 A3 5.56 5.69 10.46 10.55 7.49 7.77 6 A4 1.06 3.62 1.68 1.38 1.90 6.64 6 A5 0.01 0.00 0.03 0.01 0.00 0.07 0 A6 0.07 0.72 27.68 19.70 2.33 0.00 3 A7 5.57 8.95 18.71 6.75 16.76 33.66 6 A8 0.86 2.30 1.65 0.92 2.01 0.92 3 A9 20.21 25.59 25.86 21.62 26.75 24.66 6 A10 28.05 28.26 22.48 27.41 32.28 26.94 6 A110.22 0.83 7.39 5.88 2.05 9.27 4 A12 13.90 19.43 28.51 25.48 21.44 29.24 6 A13 15.43 18.39 12.49 14.75 15.79 10.85 6 A14 3.92 13.00 14.13 8.18 13.92 23.83 6 A15 0.06 0.02 0.01 0.01 0.04 0.03 0 A16 0.99 2.46 6.08 4.56 3.81 3.43 5 A17 1.31 2.05 3.18 1.73 2.80 4.12 6 A18 3.60 7.90 8.57 5.56 7.18 12.20 6 A19 44.82 47.53 37.16 42.20 41.51 26.33 6 A20 1.59 2.88 2.55 3.05 3.08 2.88 6

{
对于(i=1;i1)C+++iF字段>1,计数
printf“%-5s%s”,$i,(i==NF?OFS c或:OFS)#输出
}
c=0#重置计数器
}
< /代码>代码> $AWK { for(i=1;I1)C++;PrtTf“%-5s %s”,$i,(i=nf?OFS C ORS:OFS)} C=0 }文件
内径M1 M2 M3 M4 M5 M6
A1 0.82 0.73 1.40 0.52 1.84 3.20 3
A2 14.44 23.73 55.27 68.77 14.18 0.05 5
A3 5.56 5.69 10.46 10.55 7.49 7.77 6
A4 1.06 3.62 1.68 1.38 1.90 6.64 6
A5 0.01 0.00 0.03 0.01 0.00 0.07 0
A6 0.07 0.72 27.68 19.70 2.33 0.00 3
A7 5.57 8.95 18.71 6.75 16.76 33.66 6
A8 0.86 2.30 1.65 0.92 2.01 0.92 3
A9 20.21 25.59 25.86 21.62 26.75 24.66 6
A10 28.05 28.26 22.48 27.41 32.28 26.94 6
A110.22 0.83 7.39 5.88 2.05 9.27 4
A12 13.90 19.43 28.51 25.48 21.44 29.24 6
A13 15.43 18.39 12.49 14.75 15.79 10.85 6
A14 3.92 13.00 14.13 8.18 13.92 23.83 6
A15 0.06 0.02 0.01 0.01 0.04 0.03 0
A16 0.99 2.46 6.08 4.56 3.81 3.43 5
A17 1.31 2.05 3.18 1.73 2.80 4.12 6
A18 3.60 7.90 8.57 5.56 7.18 12.20 6
A19 44.82 47.53 37.16 42.20 41.51 26.33 6
A20 1.59 2.88 2.55 3.05 3.08 2.88 6

{
对于(i=1;i1)C+++iF字段>1,计数
printf“%-5s%s”,$i,(i==NF?OFS c或:OFS)#输出
}
c=0#重置计数器
}
gsub()
返回它可以匹配它的regexp(行中的第一个字符)
^.
或任何以
0开头的数字的次数。
因此匹配行中的每个数字,但以
1开头的数字除外。
或更大。然后从字段总数
NF
中减去
gsub()
返回值,得到每行大于1的数字计数

gsub()
返回与行中第一个字符regexp匹配的次数。
^。
或任意n
$ awk '{for(i=1;i<=NF;i++) {if($i+0>1) c++; printf "%-5s%s", $i, (i==NF? OFS c ORS: OFS)}c=0}' file
Id    M1    M2    M3    M4    M5    M6
A1    0.82  0.73  1.40  0.52  1.84  3.20  3
A2    14.44 23.73 55.27 68.77 14.18 0.05  5
A3    5.56  5.69  10.46 10.55 7.49  7.77  6
A4    1.06  3.62  1.68  1.38  1.90  6.64  6
A5    0.01  0.00  0.03  0.01  0.00  0.07  0
A6    0.07  0.72  27.68 19.70 2.33  0.00  3
A7    5.57  8.95  18.71 6.75  16.76 33.66 6
A8    0.86  2.30  1.65  0.92  2.01  0.92  3
A9    20.21 25.59 25.86 21.62 26.75 24.66 6
A10   28.05 28.26 22.48 27.41 32.28 26.94 6
A11   0.22  0.83  7.39  5.88  2.05  9.27  4
A12   13.90 19.43 28.51 25.48 21.44 29.24 6
A13   15.43 18.39 12.49 14.75 15.79 10.85 6
A14   3.92  13.00 14.13 8.18  13.92 23.83 6
A15   0.06  0.02  0.01  0.01  0.04  0.03  0
A16   0.99  2.46  6.08  4.56  3.81  3.43  5
A17   1.31  2.05  3.18  1.73  2.80  4.12  6
A18   3.60  7.90  8.57  5.56  7.18  12.20 6
A19   44.82 47.53 37.16 42.20 41.51 26.33 6
A20   1.59  2.88  2.55  3.05  3.08  2.88  6
{
    for(i=1;i<=NF;i++) {                             # for each field
        if($i+0>1) c++                               # if field > 1, count
        printf "%-5s%s", $i, (i==NF? OFS c ORS: OFS) # output nicely
    }
    c=0                                              # reset counter
}
$ awk 'NR>1{$0=$0"\t"NF-gsub(/^.|[[:space:]]0\./,"&")} 1' file
Id M1  M2  M3  M4  M5  M6
A1  0.82    0.73    1.40    0.52    1.84    3.20        3
A2  14.44   23.73   55.27   68.77   14.18   0.05        5
A3  5.56    5.69    10.46   10.55   7.49    7.77        6
A4  1.06    3.62    1.68    1.38    1.90    6.64        6
A5  0.01    0.00    0.03    0.01    0.00    0.07        0
A6  0.07    0.72    27.68   19.70   2.33    0.00        3
A7  5.57    8.95    18.71   6.75    16.76   33.66       6
A8  0.86    2.30    1.65    0.92    2.01    0.92        3
A9  20.21   25.59   25.86   21.62   26.75   24.66       6
A10 28.05   28.26   22.48   27.41   32.28   26.94       6
A11 0.22    0.83    7.39    5.88    2.05    9.27        4
A12 13.90   19.43   28.51   25.48   21.44   29.24       6
A13 15.43   18.39   12.49   14.75   15.79   10.85       6
A14 3.92    13.00   14.13   8.18    13.92   23.83       6
A15 0.06    0.02    0.01    0.01    0.04    0.03        0
A16 0.99    2.46    6.08    4.56    3.81    3.43        5
A17 1.31    2.05    3.18    1.73    2.80    4.12        6
A18 3.60    7.90    8.57    5.56    7.18    12.20       6
A19 44.82   47.53   37.16   42.20   41.51   26.33       6
A20 1.59    2.88    2.55    3.05    3.08    2.88        6