我正在尝试做两件事:1)每次都分配一个变量。 2)每次使用时都保存文件中的更改。例如; cat file.i
1 2 3
4 5 6
7 8 9
10 11 12
现在我想增加第二行,从第n行开始,在第二列中增加9.88%来获取此文件:
1 2 3
4 5.494 6
7 8 9
10 11.0868 12
我使用了以下脚本,但问题是我每次获得不同的增量时都必须更改9.88%,我希望有一个我更改的变量,它可以用于所有这些变量,我想要更改保存在原始文件中。
awk 'NR==1 {print $2*1.0988} NR==2 {print $2*1.0988}' file.i
答案 0 :(得分:2)
EDIT2: 由于OP再次改变了要求,所以在此处添加新代码。
awk -v line="124" -v diff="6" '(FNR==line || FNR==(line+diff)) && (FNR>=124 && FNR<=160){$2=(($2*9.88)/100)+$2;diff+=6} 1' Input_file
编辑: 根据OP,OP只想抓取124到160之间的线,并且完全除以2。
awk 'FNR%2==0 && (FNR>=124 && FNR<=160){$2=(($2*9.88)/100)+$2} 1'
关注awk
可能对您有帮助。
awk 'FNR%2==0{$2=(($2*9.88)/100)+$2} 1' Input_file
如果您想将输出保存到Input_file本身,也可以将> temp_file && mv temp_file Input_file
附加到上面的代码中。
上述代码说明:
awk '
FNR%2==0{ ##Checking condition if line number is divided by 2 is fully divided by 2 if this is TRUE then do following.
$2=(($2*9.88)/100)+$2}##Re-creating $2 here by doing multiplication with 9.88 nd dividing it by 100 to get its 9.88% and adding itself to it.
1 ##Mentioning 1 here, awk works on method of condition then action, so making condition TRUE here and not mentioning any action so by default print of current will happen.
' Input_file ##Mentioning Input_file name here.