我有一个包含类似于以下行的100次出现的文件:
X201
99.12c 9.8360E-05
120.50c 1.0550E-05
145.99c 2.7650E-05
X202
89.12c 2.8360E-05
120.50c 8.7550E-05
345.99c 5.6650E-05
我需要在乘以某个分数后立即用字段的值替换每个出现的120.50c
。因此,对于第一次匹配120.50c
,我需要将字段1.0550E-05
乘以0.79,0.10和0.11。
因此120.50c
与X201
之间的X202
匹配120.50c 1.0550E-05
,我需要用以下三行替换整行:
120.39c 8.3345E-06
120.40c 1.0550E-06
120.41c 1.1605E-06
120.39c,
120.40c
和120.41c
将是我指定的字符串,用于120.50c
的每个匹配。由于每个120.50c
之后的值不同,我无法进行简单的查找和替换。
运行脚本后,我想结束以下输出。
X201
99.12c 9.8360E-05
120.39c 8.3345E-06
120.40c 1.0550E-06
120.41c 1.1605E-06
145.99c 2.7650E-05
X202
89.12c 2.8360E-05
120.39c 6.9165E-05
120.40c 8.7550E-06
120.41c 9.6305E-06
345.99c 5.6650E-05
我一直用awk与它战斗,无法让它发挥作用。我想我可能需要使用Perl或Python。提前谢谢。
答案 0 :(得分:2)
awk
救援!
$ awk 'BEGIN{n=split("0.79 0.10 0.11",coeff)}
{key="120.50c"; c=39;
if($1==key)
for(i=1;i<=n;i++)
{sub(50,c++,key);
printf "%s\t%.4e\n", key, $2*coeff[i]; key=$1}
else print}' file | column -t
X201
99.12c 9.8360E-05
120.39c 8.3345e-06
120.40c 1.0550e-06
120.41c 1.1605e-06
145.99c 2.7650E-05
X202
89.12c 2.8360E-05
120.39c 6.9164e-05
120.40c 8.7550e-06
120.41c 9.6305e-06
345.99c 5.6650E-05