我在使用awk从文件中读取科学记数法时遇到了一些麻烦,这里有一些示例输入:
#Plane Turn Real Imaginary
HOR 1 0.0000e+00 -2.1885e-07
HOR 1 4.8481e-08 -8.1221e-08
HOR 1 4.0934e-08 -6.0784e-08
HOR 1 3.5707e-08 -5.1223e-08
HOR 1 3.1664e-08 -4.5608e-08
HOR 1 2.8268e-08 -4.1964e-08
HOR 1 2.5242e-08 -3.9469e-08
HOR 1 2.2429e-08 -3.7707e-08
HOR 1 1.9731e-08 -3.6430e-08
HOR 1 1.7082e-08 -3.5479e-08
我使用awk格式化此文件,使用以下命令与gnuplot进行绘图:
gnuplot "awk '{if($2==1){printf "%.4e\n",sqrt($3^2+$4^2)}}' bathtub_values.dat" w l
然而,算术运算不正常,经过几次测试后我才意识到awk似乎没有正确解释输入格式,我怎么指定awk格式才能使用?
答案 0 :(得分:3)
如果您无权安装其他awk,则可以定义和 使用函数来解析工程符号
% awk 'function parse_en(eng_num) {
split(eng_num,en,/[eEdD]/); return en[1]*10**en[2]; }
$1 !~ /#/ {
printf "%.4e\n",sqrt(parse_en($3)^2+parse_en($4)^2)}
' bathtub_values.dat
2.1885e-07
9.4590e-08
7.3282e-08
6.2440e-08
5.5522e-08
5.0597e-08
4.6850e-08
4.3873e-08
4.1430e-08
3.9377e-08
%