即使未找到模式,也可以转义序列

时间:2017-08-08 13:02:00

标签: awk gawk

我很高兴使用以下代码从我的文件中获取数据

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 时的输出示例如下所示:

$5

如果16 0.51 32 64 0.54 中的某个值不存在(例如32),我希望看到

SELECT A.Property_ID, A.E_ID, A.Name, B.E_ID
FROM Tbl A
INNER JOIN tbl B
 on A.Property_ID = B.Property_ID
and A.Name = B.Name
and A.E_ID < B.E_ID

1 个答案:

答案 0 :(得分:1)

保持简单,高效和健壮 - 抛弃你的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"