我正在尝试在文件中查找字符串,当我发现该字符串时,请将其分解并对其一部分进行数学运算。听起来sed
无效,因为我想做数学,awk
却很困难,因为我想就地更新文件。
我的文件如下所示(是svn差异)
Index: code/foo.c
===================================================================
--- code/foo.c (revision 13)
+++ code/foo.c (working copy)
@@ -3,5 +3,5 @@
int main(int argc, char *argv[])
{
printf("I don't like being moved around!\n%s", bar());
- return 0;
+ return 1;
}
我正在寻找@@
行,并想在结尾@@
之前的最后一个数字前加1。因此,@@ -3,5 +3,5 @@
将变成@@ -3,5 +3,6 @@
答案 0 :(得分:4)
请您尝试以下。
awk '
BEGIN{
FS=OFS=","
}
/^@@.*@@/{
split($NF,array," ")
$NF=array[1]+1" " array[2]
}
1
' Input_file
如果您要将输出保存到Input_file中,请在上述代码中附加> temp_file && mv temp_file Input_file
。
注意: :如果您使用的是GNU awk
> = 4.1.0的确也包含-i inplace
。
答案 1 :(得分:0)
使用GNU awk将第三个参数匹配():
$ awk 'match($0,/^(@@.*,)([0-9]+)( @@)$/,a){$0=a[1] a[2]+1 a[3]} 1' file
Index: code/foo.c
===================================================================
--- code/foo.c (revision 13)
+++ code/foo.c (working copy)
@@ -3,5 +3,6 @@
int main(int argc, char *argv[])
{
printf("I don't like being moved around!\n%s", bar());
- return 0;
+ return 1;
}