#!/usr/bin/awk -f
BEGIN { FS = "\t"; OFS = "," }
{
for(i = 1; i <= NF; i++) {
if ($i + 0 == $i) { $i = "=" $i }
else gsub(/"/, "\"\"", $i);
$i = "\"" $i "\""
}
print
}
Принятие Вас называет это convert.awk
, можно или звонить с также
ec2-describe-snapshots -H --hide-tags | awk -f convert.awk > snapshots.csv
или (после того, как добавление выполняет полномочия, chmod a+x convert.awk
)
ec2-describe-snapshots -H --hide-tags | ./convert.awk > snapshots.csv
Это сделает новый столбец для каждой вкладки, которая будет держать столбец комментария вместе (если это не будет содержать вкладки), но добавьте пустые столбцы (хотя, именно так Ваш образец производил взгляды, поэтому возможно, Вы на самом деле хотите это). Если Вы захотите разделить на всем пробеле (то это свернет дополнительные вкладки в таблице, но поместит каждое слово в описание как новый столбец), выньте FS="\t";
оператор.
Для будущих поколений, если Вам не нужно "
s или =
s или встроенный пробел, можно сделать это остротой:
awk -v OFS=, '{$1=$1;print}'
Не делайте этого. rbash
должен только использоваться в уже безопасной среде, если Вы не знаете то, что Вы делаете. Существует много способов вспыхнуть ограниченная оболочка удара, которые не легко предсказать заранее.
Функции могут легко быть переопределены просто путем выполнения command bash
или command sh
.
Что касается Ваших вопросов:
x() { foo; }
alias f1=x
alias f2=x
rbash
работы, потому что bash
проверяет значение argv[0]
на запуске. Если базовое имя, с продвижением разделенных тире, равно RESTRICTED_SHELL_NAME
(принимающий значение по умолчанию к rbash
, посмотрите config.h
), это работает в ограниченном режиме. Это - тот же способ, которым это работает в режиме соответствия POSIX, если вызвано как sh
. Вы видите это в следующем коде от shell.c
в ударе 4.2, строки 1132-1147:/* Return 1 if the shell should be a restricted one based on NAME or the
value of `restricted'. Don't actually do anything, just return a
boolean value. */
int
shell_is_restricted (name)
char *name;
{
char *temp;
if (restricted)
return 1;
temp = base_pathname (name);
if (*temp == '-')
temp++;
return (STREQ (temp, RESTRICTED_SHELL_NAME));
}