使用awk保存更改

时间:2018-05-27 03:09:19

标签: awk

我正在尝试做两件事: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

1 个答案:

答案 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.