对于遵循“-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=","
因为所示的文件是用空格分隔的。