Каждая строка содержит текст и цифры в одном столбце. Мне нужно рассчитать сумму чисел в каждой строке. Как я могу это сделать? Спасибо
example.log содержит:
time=31sec
time=192sec
time=18sec
time=543sec
Ответ должен быть 784
text-processing
awk
numeric-data
разъем
источник
источник
Ответы:
Если ваш вариант
grep
поддержки-o
, вы можете попробовать:POSIXly:
источник
С более новой версией (4.x) GNU
awk
:С другими
awk
попробуйте:источник
s+0
в случае, когдаs
пусто, он будет печатать0
вместо пустого.s
может быть пусто; если входные данные не содержат строк (т. е. если вообще нет входных данных ). В этом случае возможны два поведения; 1) нет ввода => нет вывода или 2) всегда что-то выводит, если только 0. Оба являются разумными вариантами в зависимости от контекста приложения.+0
Обращается вариант 2). Для адреса вариант 1) вам лучше написатьEND {if(s) print s}
. - Поэтому нет смысла принимать любой вариант (для этого углового случая без данных), пока он не будет определен вопросом.источник
time=1.4e5sec
Еще один GNU
awk
один:Один
perl
:POSIX один:
источник
источник
sed
:awk --field-separator = '{ sum+=$2 } END { print sum}' data.dat
-F'='
вместо--field-separator =
man awk
единственный дает-F fs
и--field-separator fs
-F'='
или-F '='
есть 2 способа сделать-F fs
(fs это "=" в вашем случае). Я добавил одинарные кавычки, чтобы гарантировать, что fs правильно виден и интерпретируется awk, а не оболочкой (например, полезно, если fs равен ';')Вы можете попробовать это:
источник
Все опубликовали отличные
awk
ответы, которые мне очень нравятся.Вариант @cuonglm
grep
с заменой наsed
:sed
Полосы все для чисел , за исключением.paste -sd+ -
объединяет все строки в одну строкуbc
Вычисляет выражениеисточник
Вы должны использовать калькулятор.
С вашими четырьмя линиями, которые печатают:
И проще:
... который печатает ...
Если
dc
вам нужна скорость, то вы хотите. Традиционно это былbc
компилятор - и до сих пор для многих систем.источник
dc
насколько я могу судить. О чем ты говоришь?perl
со стандартным набором инструментов Unix - это не имеет особого смысла, если вы используете инструменты GNU, скомпилированные в цепочке инструментов GNU. Все навороты, которые могут негативно повлиять на производительность Perl, также присутствуют во всех этих GNU-скомпилированных утилитах GNU. Грустно, но правда. Вам нужен настоящий, просто построенный, простой набор инструментов, чтобы точно оценить разницу. Например, как набор инструментов семейной реликвии, статически связанный с мусульманскими библиотеками - таким образом, вы можете сравнить парадигму «один инструмент / одна работа» и «один инструмент, чтобы управлять ими всеми».Через python3,
источник
re.findall
возвращает список строк, это не сработаетsum(int(e) for e in l)
это более питонический.Чистый раствор Bash (Bash 3+):
Укороченная версия:
источник
PS4='$((x+=${time%s*}))' time=0 x=0 sh -x <infile