Awk скрипт для вычитания из поля выше - PullRequest
1 голос
/ 09 декабря 2010

Привет, у меня есть входной файл с одним полем:

30
58
266
274
296
322
331

Мне нужно, чтобы выходные данные были разностью 2-й и 1-й строк (58-30 = 28) и 3-й и 2-й строк (266-58 = 208) и так далее мой вывод должен выглядеть следующим образом:

30 30
58 28
266 208
274 8

любая помощь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

На самом деле вам не нужен цикл for из ответа Хачика, так как Awk все равно пройдет через все строки. Проще это:

cat file | awk '{ BEGIN { a=0 }; { print $1, $1-a; a=$1 }'

Однако также можно пропустить первую строку, которая вам на самом деле не нужна, инициализируя переменную в блоке BEGIN и не выполняя печать, если переменная инициализирована до изменения ее значения. Вроде как:

BEGIN { started=0 }; { if(0 == started) { started = 1 } else { print $1, $1-a } }
1 голос
/ 09 декабря 2010
data=`cat file | xargs`
echo $data | awk '{a=0; for(i=1; i<=NF;i++) { print $i, $i-a; a=$i}}'

30 30
58 28
266 208
274 8
296 22
322 26
331 9

Обновление по комментарию Без cat/xargs:

awk '{printf "%d %d\n", $1, $1-a; a=$1;}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...