使用 awk 修改文件中的数值,仅遵循匹配的模式

使用 awk 修改文件中的数值,仅遵循匹配的模式

对于遵循“-period”模式的数字,我需要将数值乘以一个常数,例如 0.9。只有模式“-period”之后的数字需要乘以,其他数字则不需要,因为文件中会有很多数值。请提供正确的awk命令选项来修改文件中的值。

awk -F, '{$3=$3*0.9;print}' OFS=, inputfile.txt

没有用,因为这些数字不在一列中。


文件内容:

clock -period 5.00 -name clk1 
clock -name txclk2 -period 10.00 
clock -period 7.00 -name clk3 
input_delay -clock clk1 4.0  

修改后必须是:

clock -period 4.50 -name clk1 
clock -name txclk2 -period 9.00
clock -period 6.30 -name clk3 
input_delay -clock clk1 4.0  

答案1

我认为在 awk 中没有比迭代字段更简单的方法了:

$ awk '{for(i=1;i<NF;i++){if($i == "-period") $(i+1) *= 0.9}} 1' inputfile.txt 
clock -period 4.5 -name clk1
clock -name txclk2 -period 9
clock -period 6.3 -name clk3
input_delay -clock clk1 4.0  

如果你想要特定的浮点格式,那么

$ awk '{for(i=1;i<NF;i++){if($i == "-period") $(i+1) = sprintf("%.2f",0.9*$(i+1))}} 1' inputfile.txt 
clock -period 4.50 -name clk1
clock -name txclk2 -period 9.00
clock -period 6.30 -name clk3
input_delay -clock clk1 4.0  

注意:我省略了-F,OFS=","因为所示的文件是用空格分隔的。

相关内容