Наконец, я найду ответ Думает всем, кто помог
это код:
# Use “getopts” to give options to the script
while getopts "i:a:y:" option; do
case $option in
i)
i=$OPTARG
;;
a)
a=$OPTARG
;;
y)
y=$OPTARG
;;
\?)
echo -e "\nUsage: mortgage rate amount period\n"
exit 1
;;
esac
done
# Compute the monthly payment
x=$(echo "scale=20;1+$i/200" | bc)
z=$(echo "scale=20;1/6" | bc)
x2z=$(echo "scale=20;e($z*l($x))" | bc -l)
y12=$(echo "scale=20;-$y*12" | bc)
x2z2y12=$(echo "scale=20;e($y12*l($x2z))" | bc -l)
p=$(echo "scale=3;$a*(($x2z-1))/(1-$x2z2y12)" | bc)
# Print the monthly payment
Echo “Your Monthly is $p”
exit 0
-121--125371-
Perl Shell поддерживает три типа переменных: скаляры, списки и хеши.
Perl Shell (psh) сочетает аспекты bash и других оболочек с силой Perl скриптинга.
и
Оболочка Perl - это оболочка, сочетающая интерактивный характер оболочки Unix с силой Perl. Цель состоит в том, чтобы в конечном итоге иметь полнофункциональную оболочку, которая ведет себя так, как ожидалось для нормальной работы оболочки. Но Perl Shell будет использовать синтаксис и функциональность Perl для операторов потока управления и других вещей.
Он не столько различает последовательности, целые числа, плавающие числа и двойные числа [1], сколько бесшовно преобразует их между собой, как это необходимо, точно так же, как это делает Perl.
Трудно понять причину, по которой оболочке нужно было бы различать число 1
и строку «1»
в любой ситуации, когда автообнаружение было неправильным, или когда не хватало различных операторов для сравнения строк и чисел против regexp. Так же, как bash
или другие оболочки.
[1] См. специализированные модули, такие как Math:: BigFloat , если требуется специальная обработка типов float. или Math:: Bigint для очень больших целых чисел.
-121--82022-
Я использую трофф для моего повседневного набора; Я использую версию трофа Heirloom (см. http://heirloom.sourceforge.net/doctools.html ), которая имеет очень мощную поддержку шрифтов (TTF, Type1, OTF и т. д.), Алгоритм Knuth для форматирования абзаца, а также несколько функций микротипирования, которые невозможно найти в простом TeX; он легче, чем LaTeX и до тех пор, пока вам не нужно набрать уравнения, я нахожу, что гораздо проще получить высокоуровневое наборное решение, чем с LaTeX (гораздо проще загрузить шрифты, получить контроль над точным положением вещей и т. д.).
Вы не можете использовать подстановку параметров оболочки внутри awk
программы.
Чтобы удалить первый бит шестого столбца, используйтеsub()
:
bjobs -w | awk 'NR > 1 { sub("^[^*]*[*]", "", $6); print $1, $6 }'
Это изменит шестое поле, удалив бит до *
перед его печатью. Регулярное выражение ^[^*]*[*]
соответствует любому количеству символов, кроме *
в начале строки, а затем *
. Затем она заменяется пустой строкой.
Вышеприведенное преобразует вывод вопроса в
821213 pirineus
823954 pirineus4
824083 collserola2
824297 collserola10
824305 collserola5
ПРИМЕЧАНИЕ.:Все варианты ниже (, включая решение sed
), предполагают наличие *
в шестом поле . Вышеупомянутое сработало бы, даже если бы его не было.
Другой способ сделать это — разделить шестое поле на *
и напечатать вторую часть:
bjobs -w | awk 'NR > 1 { split($6, a, "[*]"); print $1, a[2] }'
Третий способ сделать это — использовать как пробелы, так и *
в качестве разделителя полей (обратите внимание на изменение номера поля):
bjobs -w | awk -F "[[:blank:]*]+" 'NR > 1 { print $1, $7 }'
Использованиеsed
:
bjobs -w | sed -nE 's/^([[:alnum:]]+).*\*([[:alnum:]]+).*/\1 \2/p'
Я использовал команду ниже, чтобы получить желаемый результат
awk 'NR >=2{print $1,$6}' example.txt | sed "s/[0-9]\{1,2\}\*//g"
выход
821213 pirineus
823954 pirineus4
824083 collserola2
824297 collserola10
824305 collserola5