我有一个制表符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
答案 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