Невозможно использовать модели разрешений Unix, доступные через файлы /etc/passwd
и /etc/shadow
и sudo
.
Одним из методов, которые я видел в прошлом, было предоставление фронтэнд веб- приложения и/или программы или сценария оболочки, которые могли бы выполняться через sudo
, но ничего другого. Это предоставит им API для выполнения очень узкого набора задач через «приложение», без предоставления им реальных возможностей через sudo
или общего доступа к командам useradd
и usermod
.
-121--196361-
bash
не может выполнять операции плавающего пункта, только целые числа. Вместо этого я предлагаю использовать bc -l
:
$ mPercent='2.72'
$ fPercent='3.14'
$ bc -l <<< $(echo "$mPercent / 100 "*" .482 + $fPercent / 100 "*" .518")
.02937560000000000000
-121--86132-
Я предлагаю использовать bc
для арифметических операций и (здесь Последовательность) для ввода значений в
bc
.
$ mPercent=3.27
$ fPercent=3.27
$ bc -l <<< "$mPercent / 100 * .482 + $fPercent / 100 * .518"
.03270000000000000000
Здесь -l
опция bc
позволит использовать арифметику с плавающей запятой с более математическими функциями.
Можно сделать это с помощью одного лайнера, сохранив последний файл в новую переменную, а затем установив его оригинальный указатель на пустую строку, а затем вывести на экран $0 и сохраненную переменную с последним файлом.
(echo a b c 10; echo x y 2 ; echo x 1) \
| awk '{lastf=$NF ; $NF="" ; print $0,", "lastf}' \
| column -ts,
# output
a b c 10
x y 2
x 1
Измените сепаратор столбец в E.G. вкладка , чем использование колонна
:
output | sed 's/\S\+\s*$/\t&/' | column -t -s $'\t'
вот решение в awk, который динамически определяет необходимую ширину столбца. Он может принимать любое количество полей на каждой строке, но предполагает, что окончательное поле - это целое число. Целые числа отформатированы, чтобы выстроить справа, по желанию.
Format.awk
#!/usr/bin/awk -f
# Format text and numbers into two columns
# Written by PM 2Ring 2015.04.16
#Gather data, line by line
{
#Split name from number
match($0, /^(.*) ([0-9]+)[[:space:]]*$/, a)
#printf "%d: %s -> [%s] [%s]\n", NR, $0, a[1], a[2]
#Store name & number into arrays
name[NR] = a[1]
num[NR] = a[2]
#Update field widths
namelen = length(a[1])
if (namelen > maxname)
maxname = namelen
numlen = length(a[2])
if (numlen > maxnum)
maxnum = numlen
}
#Print re-formatted data
END{
for(i=1; i<=NR; i++)
#Use printf's '*' modifier to specify field widths
printf "%-*s %*d\n", maxname, name[i], maxnum, num[i]
}
Выход
Person 49
Persons Boss 3
HR 21
CEO 93
System Administrator 2
Вы можете вызвать следующее сценарий:
$ awk -f format.awk data_filename
Вы также можете использовать текстовые данные. И если вы используете CHMOD
, чтобы дать ему дайте его выполнять разрешения, вы можете запустить его как любую другую команду.
Очевидно, что это немного более подробно, чем решение Коста, которое использует SED
, чтобы предварительно обрабатывать вход в колонку
. Поэтому я предлагал использовать это, если только вы действительно не хотите, чтобы количество было правильно оправдано. :) ОТО, хотя этот скрипт выглядит , больше, чем одноклассник Коста, awk
очень быстро, поэтому я ожидаю, что это решение будет сопоставимым в скорости к Костам, даже с действительно большим Дата файлы.