AWK:如何减去那些有数字的行的最后一个字段

AWK:如何减去那些有数字的行的最后一个字段,awk,Awk,我有一个文件包含: A......Page 23 by John Smith B......Page 73 by Jane Doe C......Page 131 by Alice Grey 我想用22减去这些数字,所以第一行是……第1页 我在很多地方搜索过gsub或任何其他awk选项,但都没有结果。我已经通过vim编辑器完成了这项工作,但了解awk解决方案将非常棒 你能试试下面的吗 awk '{$NF=$NF~/[0-9]/ && $NF>22?$NF-22:$NF}

我有一个文件包含:

A......Page 23
by John Smith
B......Page 73
by Jane Doe
C......Page 131
by Alice Grey
我想用22减去这些数字,所以第一行是……第1页


我在很多地方搜索过gsub或任何其他awk选项,但都没有结果。我已经通过vim编辑器完成了这项工作,但了解awk解决方案将非常棒

你能试试下面的吗

awk '{$NF=$NF~/[0-9]/ && $NF>22?$NF-22:$NF} 1'  Input_file

我认为最后一列中不需要负值,所以我检查了条件,如果
$NF
最后一列大于
22
,则只执行减法,然后执行我认为的第二个条件(这很明显)您只想用数字减去
22
,因此设置条件,检查最后一列中是否有数字。

Short
awk
方法:

$ awk '$NF ~ /^[0-9]+$/{ $NF = $NF-22 }1' file
A......Page 1
by John Smith
B......Page 51
by Jane Doe
C......Page 109
by Alice Grey

  • $NF~/^[0-9]+$/
    -只考虑最后一个字段值
    $NF
    为数字的行,因为它要进行算术运算

很好,您告诉我们您已经尝试了一些代码,在您的帖子中添加这些代码总是很好的,干杯。这个答案更简洁,但我已经在我的笔记本上写下了这两个答案,以了解它们带来的价值。