кумулятивные общие количества со смещенным столбцом

Можно просто использовать псевдоним с этой целью. Для создания псевдонима постоянным, можно добавить его к Вашему ~/.bashrc файл. Например, Вы, если Вы добавляете alias list='ls -la' строка, каждый раз Вы войдете list управляйте в своей оболочке, ls -la команда будет на самом деле выполняться. Обратите внимание на это, если Вы просто создали свой псевдоним из командной строки, не помещая его в Ваш bashrc файл, этот псевдоним потеряется каждый раз, когда Вы повторно вводите свою оболочку.

3
14.04.2013, 12:40
2 ответа

Вот:

$ 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
6
27.01.2020, 21:14
  • 1
    Большая вещь, я предполагаю, что знание инструментария не менее важно, чем знание регулярных выражений. +1 –  TNW 14.04.2013, 12:59
  • 2
    , который сладок! –  Tom 14.04.2013, 13:11
  • 3
    Или, поместите дополнение в конец. nawk -F+ '{printf("%s+%d\n",$1,sum);sum+=$2}' blah.txt –  Runium 14.04.2013, 13:12
  • 4
    @Sukminder, Который был бы менее портативным, хотя, не (бесполезный) НАЧИНАЮТ пункт, но GNU определенные опции. –  jlliagre 14.04.2013, 18:46
  • 5
    Почему не просто print $1,sum с выходным указанным разделителем? –  Bernhard 14.04.2013, 20:10

Лучший способ сделать, который должен изучить и использовать регулярные выражения, причину в будущем, это сохранит Вас большая проблема, делающая такую вещь.

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]+) соответствует ненулевому числу длины (и помещает его как второй элемент массива).

Конечно, это может быть сделано более тщательно продуманным, наряду с некоторой проверкой ошибок, особыми случаями соответствия и т.д. - но я поощряю Вас исследовать это (а именно, регулярные выражения) самостоятельно.

0
27.01.2020, 21:14
  • 1
    я - знакомые w регулярные выражения так, попытается справиться с Вашим решением: благодарит занять время для изложения решения. –  Tom 14.04.2013, 13:26
  • 2
    Таким образом, я мог обновить и расширить свое скудное awk знание, таким образом, я не могу сказать, что это не стоило того ;) –  TNW 14.04.2013, 14:52

Теги

Похожие вопросы