通过awk减去现有数字来添加数字

时间:2014-10-26 23:43:29

标签: awk

我想转换

Title Page/4,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0                  
Contents/16,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0                   

Title Page 1/4,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0                  
Contents 13/16,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0                   

规则是将/后面的数字减去3并将结果添加到/前面。

我尝试使用awk

awk -F',/' '{gsub(/\//, ($2-10) + "\/"}' myfile

但它不起作用。为什么?感谢。

1 个答案:

答案 0 :(得分:2)

对您的尝试稍作修改会产生所需的输出:

$ awk -F'[,/]' '{sub(/\//, " " ($2-3) "/") }1' file
Title Page 1/4,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0                  
Contents 13/16,Black,notBold,notItalic,open,TopLeftZoom,0,0,0.0 

-F用于指定输入字段分隔符。我已将其更改为与逗号和斜杠匹配的正则表达式组,这意味着第二个字段$2包含您要替换的数字。由于您只对每条记录中的单个替换感兴趣,因此我使用了sub而不是gsub。请注意,在awk中,字符串会自动连接(您不应使用+)。

awk程序像condition { action }那样被结构化。如果未指定条件,则始终运行操作块。如果未指定任何操作,则默认操作为{ print },用于打印记录。在上面的脚本中,1用于打印记录,因为它是评估为true的最简单的表达式。