代码之家  ›  专栏  ›  技术社区  ›  Manolete

即使找不到模式,也会出现转义序列

  •  1
  • Manolete  · 技术社区  · 7 年前

    for i in 16 32 64
    do
       size=$i
       printf "%d " ${size}
       awk -v pat="$size" '$0 ~ pat {printf "%f \n",$5}' $file
    done
    

    但是我注意到如果 $5 未找到 \n $5 输入示例如下

     #bytes #repetitions  t_min[usec]  t_max[usec]  t_avg[usec]
                0         1000         0.04         0.09         0.06
                1         1000         0.15         1.22         0.47
                2         1000         0.16         1.25         0.49
                4         1000         0.16         1.25         0.47
                8         1000         0.16         1.30         0.49
               16         1000         0.16         1.33         0.51
               32         1000         0.17         1.40         0.53
               64         1000         0.19         1.43         0.54
              128         1000         0.18         1.56         0.59
              256         1000         0.27         1.72         0.68
              512         1000         0.25         1.91         0.73
             1024         1000         0.32         2.53         0.90
             2048         1000         0.38         3.98         1.42
    

    输出示例 $5

    16 0.51
    32 0.53
    64 0.54
    

    不存在(例如32),我想看看

    16 0.51
    32 
    64 0.54
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Ed Morton    7 年前

    保持简单、高效和健壮-扔掉shell循环,只需使用:

    awk -v r='16 32 64' '
    BEGIN {
        split(r,tmp)
        for (i in tmp) {
            reps[tmp[i]]
        }
    }
    $1 in reps { print $1, $5 }
    ' "$file"