AWK - 匹配单词后舍入数字

时间:2017-10-30 23:12:54

标签: bash awk numbers rounding

我想在一个单词(alter#)匹配后打印圆形数字。

input.txt中:

g11_21           g11_22           g11_23           g11_24          
 g11_25           g11_26           g11_27           g11_28          
 g11_29           g11_30           g11_31           g11_32          
 temper           alter#          
  9.145e-06        8.486e-06          0.5500           0.5500       
    0.5500           0.5500           0.5500           0.5500       

output.txt的:

  0       0          1           1       
  1       1          1           1   

我尝试使用以下awk代码。它可以对数字进行舍入但我认为我没有正确打印出来。任何帮助表示赞赏。

awk '/alter#/,EOF {printf("%.0f\n",$0)}' input.txt > output.txt

2 个答案:

答案 0 :(得分:2)

关注awk可能对您有帮助。

awk '{
for(i=1;i<=NF;i++){
  if(!flag){
    if($i == "alter#"){
      flag=1}
};
  if(flag && $i && $i != "alter#"){
    val=1;
    printf ("%0.0f ", $i)}
};
  if(val){
    print ""
};
  val=""
}'   Input_file

输出如下。

0 0 1 1
1 1 1 1

答案 1 :(得分:2)

gawk

awk 'BEGIN   {CONVFMT="%.0f"} 
     f       {for(i=1;i<=NF;i++) $i=$i+0; print}; 
     /alter#/{f=1}'