Можно просто использовать псевдоним с этой целью. Для создания псевдонима постоянным, можно добавить его к Вашему ~/.bashrc
файл. Например, Вы, если Вы добавляете alias list='ls -la'
строка, каждый раз Вы войдете list
управляйте в своей оболочке, ls -la
команда будет на самом деле выполняться. Обратите внимание на это, если Вы просто создали свой псевдоним из командной строки, не помещая его в Ваш bashrc
файл, этот псевдоним потеряется каждый раз, когда Вы повторно вводите свою оболочку.
Вот:
$ awk -F+ '{sum+=$2;printf("%s+%d\n",$1,sum-$2);}' blah.txt
aa+0
bb+2
cc+6
dd+16
Edit1: вот немного более простой путь благодаря Sukminder
$ awk -F+ '{printf("%s+%d\n",$1,sum);sum+=$2}' blah.txt
Edit2: И немного более краткое, благодаря Bernhard:
$ awk -F+ '{print $1,sum;sum+=$2}' OFS="+" blah.txt
Edit3: но первый не отображается 0 на первой строке, таким образом, вот исправленная и несколько упакованная версия, которая показывает более короткий способ ответить на вопрос Tom (пока некоторый новый комментарий не предлагает лучший):
$ awk -F+ '{print$1,s+0;s+=$2}' OFS=+ blah.txt
Лучший способ сделать, который должен изучить и использовать регулярные выражения, причину в будущем, это сохранит Вас большая проблема, делающая такую вещь.
cat blah.txt | gawk 'match($0, /([^0-9]*)([0-9]+)/, ary) {print ary[1] ary[2]-2}'
Необходимо будет заменить последними 2 переменной сдвига. Необходимо отметить использование gawk
. Насколько я знаю, регулярный awk
не может извлечь группы из регулярных выражений.
Что это действительно делает? Это делает соответствие на $0
, вставление результатов ary
, использование регулярного выражения /([^0-9]*)([0-9]+)/
, который соответствует: ([^0-9]*)
- 0 или больше символов, которые не являются числами и помещают его в первый индекс массива (круглые скобки ответственны за ту вещь, названную, группируясь), затем ([0-9]+)
соответствует ненулевому числу длины (и помещает его как второй элемент массива).
Конечно, это может быть сделано более тщательно продуманным, наряду с некоторой проверкой ошибок, особыми случаями соответствия и т.д. - но я поощряю Вас исследовать это (а именно, регулярные выражения) самостоятельно.
nawk -F+ '{printf("%s+%d\n",$1,sum);sum+=$2}' blah.txt
– Runium 14.04.2013, 13:12print $1,sum
с выходным указанным разделителем? – Bernhard 14.04.2013, 20:10