Добавление последнего номера в каждом файле к номерам в следующем файле - PullRequest
1 голос
/ 30 сентября 2019

У меня есть несколько каталогов, каждый из которых содержит файл со списком целых чисел 1-N, которые не обязательно являются последовательными и могут иметь разную длину. Чего я хочу добиться, так это одного файла со списком всех этих целых чисел, как если бы они были сгенерированы в одном списке.

Я пытаюсь добавить окончательное значение N из файла 1 ко всемзначения в файле 2, затем возьмите новое конечное значение файла 2 и добавьте его ко всем значениям в файле 3 и т. д.

Я попытался сделать это, установив счетчик и зацикливая файлы, сбрасывая счетчиккогда я доберусь до конца файла. Проблема в том, что p = 0 будет продолжать сбрасывать, что очевидно в коде, но я не уверен, как еще это сделать.

Что я пробовал:

p=0
for i in dirx/dir_*; do
        (cd "$i" || exit;
        awk -v p=$p 'NR>1{print last+p} {last=$0} END{$0=last; p=last; print}' file >> /someplace/bigfile)
done

Какойаналогичен ответу, предложенному в этом вопросе Замена значения в столбце другим значением в текстовом файле с использованием awk

Теперь мне интересно, нужен ли мне if else, если это первый dirтогда p = 0, если нет, то p = последнее значение из первого файла, хотя я не уверен в этом, или как я могу получить последнее значение. Я использовал awk, потому что это то, что я понимаю, небольшое количество, которое я обычно использую.

1 Ответ

2 голосов
/ 30 сентября 2019

С GNU awk

gawk '{print $1 + last} ENDFILE {last = last + $1}' file ...

Демо:

$ cat a
1
2
4
6
8

$ cat b
2
3
5
7

$ cat c
1
2
3

$ gawk '{print $1 + last} ENDFILE {last = last + $1}' a b c
1
2
4
6
8
10
11
13
15
16
17
18
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...