Найти строку в файле и выполнить математику в Linux - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь найти строку в файле, и когда я нахожу эту строку, разбить ее и выполнить математику на части.Похоже, sed не будет работать, потому что я хочу сделать математику, а awk будет сложно, потому что я хочу обновить файл на месте.

Мой файл выглядит так (это svn diff)

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 @@

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

С GNU awk для соответствия 3-го аргумента ():

$ 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;
 }
0 голосов
/ 03 декабря 2018

Не могли бы вы попробовать следующее.

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...