Как оценить арифметическое выражение, переданное как аргумент в awk?оценить арифметическое выражение, переданное как аргумент в awk
У меня есть это в файле.
1*2*3
1+2*3
AWK должен вывести 6, 7, когда этот файл передается в.
Как оценить арифметическое выражение, переданное как аргумент в awk?оценить арифметическое выражение, переданное как аргумент в awk
У меня есть это в файле.
1*2*3
1+2*3
AWK должен вывести 6, 7, когда этот файл передается в.
awk(1)
является неправильным инструментом, поскольку он не имеет eval()
функцию. Я предлагаю изменить файл на вход для bc(1)
или с помощью арифметического расширения оболочки:
while read expr; do
echo "$(($expr))"
done < file
кроме того, вы можете попробовать эти способы:
В качестве примера, рассмотрим, что iftop
дает:
Host name last 2s last 10s last 40s cumulative
1 10.150.1.1 => 650B 533B 533B 2.08KB
85.239.108.20 <= 16.0KB 12.9KB 12.9KB 51.5KB
Предположим, что вам нужны 2 линии вверх/вниз в в одну строку и вычислить KB/B в значения правого байта (* 1024). Вы могли бы это:
iftop -i eth1 -ts 10 -Bn|egrep "<|>"| sed 's/^ //g;s/^[1-9]/x/g;s/KB/ 1024/g;s/B/ 1/g' | tr -d '\n'|tr "x" '\n'| grep .| awk '{print $1" "$11" - "$9*$10+$19*$20" "$9*$10" "$19*$20 }'
Я знаю, что это ужасно, но мы можем:
awk '{system(sprintf("awk \"BEGIN {print " $0 "}\""))}'
как указывалось, Ьс, Python Eval, Баш $(())
, являются лучшие решения
последнее предложение Perl:
perl -nE 'say eval'
что о без awk: `while read line; do echo $ [line]; done
khachik
2010-11-27 16:37:12
@khachik - это был упрощенный пример. Фактический файл содержит 2 столбца - 6 1 * 2 * 3 и т. Д. Мне нужно разделить строку перед оценкой. – Fakrudeen 2010-11-27 17:01:59
вы можете разделить с помощью `awk` или что-то еще, а затем оценить арифметические операции. – khachik 2010-11-27 17:03:37