我一直很高兴地使用下面的代码从我的文件中获取数据
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
中的一个值不存在(例如32个),我希望看到
16 0.51
32
64 0.54
发布于 2017-08-08 13:57:54
保持简单、高效和健壮--丢弃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"
https://stackoverflow.com/questions/45569107
复制相似问题