Как мне сложить первые n строк другого столбца в Bash - PullRequest
0 голосов
/ 25 января 2019

Например, учитывая

1 4
2 5
3 6

Я хочу суммировать числа во втором столбце и создать новый столбец с ним.Новый столбец 4, 9 (4 + 5) и 15 (4 + 5 + 6)

1 4 4
2 5 9
3 6 15

Ответы [ 3 ]

0 голосов
/ 25 января 2019

это более идиоматично

$ awk '{print $0, s+=$2}' file

1 4 4
2 5 9
3 6 15

вывести текущую строку и значение s, которое увеличивается со вторым полем, другими словами, является скользящей суммой.

это можно использовать для игры в гольфв следующее, если все значения положительны (поэтому нет вероятности суммирования до 0), но, возможно, слишком загадочно.

$ awk '$3=s+=$2' file
0 голосов
/ 25 января 2019

Еще один awk ..

$ cat john_ward.txt
1 4
2 5
3 6
$ awk ' {$(NF+1)=s+=$NF}1 ' john_ward.txt
1 4 4
2 5 9
3 6 15
$
0 голосов
/ 25 января 2019

Не могли бы вы попробовать, если вы в порядке с awk.

awk 'FNR==1{print $0,$2;prev=$2;next} {print $0,$2+prev;prev+=$2}'  Input_file

OR

awk 'FNR==1{print $0,$2;prev=$2;next} {prev+=$2;print $0,prev}'  Input_file

Объяснение: Добавление пояснения к приведенному выше коду сейчас.

awk '                    ##Startig awk program here.
FNR==1{                  ##Checking condition if line is first line then do following.
  print $0,$2            ##Printing current line with 2nd field here.
  prev=$2                ##Creating variable prev whose value is 2nd field of current line.
  next                   ##next will skip all further statements from here.
}                        ##Closing block for FNR condition here.
{                        ##Starting new block here.
  prev+=$2               ##Adding $2 value to prev variable value here.
  print $0,prev          ##Printing current line and prev variable here.
}' Input_file            ##mentioning Input_file name here.

PS: Добро пожаловать в SO, вам нужно упомянуть ваши усилия, которые вы приложили для решения ваших проблем, поскольку мы все здесь, чтобы учиться.

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