Awk - 用分隔符替换

Awk - replacement with seperators

我写了这个 awk 程序

awk '{x=-5; print , x, }' 

将每行中的第二个数字减去 5。

当输入是这样的:number1 number2 number3(即用空格分隔)时,这工作得很好。然后输出是 number1 number2-5 number3。

现在,如果数字由 ; 分隔,我如何扩展该程序以实现相同的功能?而不是空格 - 任何人都可以帮助我吗?

例如输入是

30;31;32
11;6;5
1;7;10

那么预期的输出是

30;26;32
11;1;5
1;2;10

你们很亲近!

您只需更改 FSOFS 变量,awk 将完成剩下的工作:

awk 'BEGIN{FS=OFS=";"}
{x=-5; print , x, }' file
30;26;32
11;1;5
1;2;10

阅读 awk manual 中的这些变量。


正如 Ed Morton 在评论中所述,如果您知道输入和输出具有相同数量的字段,您还可以使用更惯用的 awk:

awk 'BEGIN{FS=OFS=";"}
{-=5; print}' 

或:

awk 'BEGIN{FS=OFS=";"}
{-=5} 1'    # the 1 is True and awk reacts to a true by printing