将所有列除以第一列

时间:2019-09-30 21:05:44

标签: awk

我有一个制表符delim文件

1A      865     508     512     146     139     499     504     541     539     8       11      62      67      1       1       1       1       30      40      4       3       0       2       0       0   0 0
1B      34      12      12      2       5       12      14      19      18      1       1       2       0       0       0       0       0       1       1       0       0       0       0       0       0   0 0

我需要将col3上的每个col除以col2,然后将结果乘以100(四舍五入到小数点后两位)

我有

1A  865 58.73  59.19  16.88  16.07  57.69  58.27  62.54  62.31  0.92  1.27  7.17   7.75   0.12  0.12  0.12  0.12  3.47  4.62  0.46  0.35  0.00  0.23  0.00  0.00  0.00  0.00
1B  34 35.29  35.29  5.88   14.71  35.29  41.18  55.88  52.94  2.94  2.94  5.88   0.00   0.00  0.00  0.00  0.00  2.94  2.94  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00

我在做

awk 'BEGIN {FS=OFS="\t"} {for (i=3; i<=NF; i++) printf "%.2f\t",($i/=$2)*100;}1'

但是我得到

58.73  59.19  16.88  16.07  57.69  58.27  62.54  62.31  0.92  1.27  7.17   7.75   0.12  0.12  0.12  0.12  3.47  4.62  0.46  0.35  0.00  0.23  0.00  0.00  0.00  0.00  1A  865   0.587283  0.591908  0.168786   0.160694  0.576879  0.582659  0.625434  0.623121  0.00924855  0.0127168   0.0716763  0.0774566  0.00115607   0.00115607   0.00115607  0.00115607  0.0346821  0.0462428  0.00462428  0.00346821   0           0.00231214  0           0           0            0
35.29  35.29  5.88   14.71  35.29  41.18  55.88  52.94  2.94  2.94  5.88   0.00   0.00  0.00  0.00  0.00  2.94  2.94  0.00  0.00  0.00  0.00  0.00  0.00  0.00  0.00  1B  34    0.352941  0.352941  0.0588235  0.147059  0.352941  0.411765  0.558824  0.529412  0.0294118   0.0294118   0.0588235  0          0            0            0           0           0.0294118  0.0294118  0           0            0           0           0           0           0            0

1 个答案:

答案 0 :(得分:3)

使用awk:

awk 'BEGIN{FS=OFS="\t"}{for(i=3;i<=NF;i++) $i=sprintf("%.2f",$i/$2*100)}1' file

输出:

1A      865     58.73   59.19   16.88   16.07   57.69   58.27   62.54   62.31   0.92    1.27    7.17    7.75       0.12    0.12    0.12    0.12    3.47    4.62    0.46    0.35    0.00    0.23    0.00    0.00    0.00       0.00
1B      34      35.29   35.29   5.88    14.71   35.29   41.18   55.88   52.94   2.94    2.94    5.88    0.00       0.00    0.00    0.00    0.00    2.94    2.94    0.00    0.00    0.00    0.00    0.00    0.00    0.00       0.00