Создание rm
запрос на подтверждение (как в ответ Руи Ф. Рибейро ) заставит вас привыкать зависеть от этого. Тогда, если вы когда-нибудь войдете в другую систему, вас ждет неприятный сюрприз.
Вместо этого я бы предложил переобучиться - на ум приходят два подхода:
Один, который вы предложили, - заставить rm
просто не работать. Это довольно просто, псевдоним rm = ~ / bin / dont-use-rm
(а затем, необязательно, создайте этот сценарий с эхом, напоминающим вам, и exit 1
).
Второй - приучить себя всегда вводить rm -i
. Вы можете сделать себя: снова псевдоним rm = ~ / bin / force-rm-i
, и пусть это будет сценарий оболочки, подобный строкам:
#!/bin/sh
if [ '-i' != "$1" ]; then
# you could use getopt, etc. for better command-line parsing, but that
# is much more work.
echo -e "\aIgnoring your command because you forgot to use 'rm -i'."
exit 1
else
exec rm "$@"
fi
(Примечание: "echo -e" не может поддерживаться всеми оболочками; не стесняйтесь использовать / bin / bash
вверху, если ваш / bin / sh
не поддерживает.)
Используйте для этого псевдонимы, потому что вы можете легко установить те, которые влияют только на интерактивные оболочки - вы не хотите нарушать "rm" в сценариях оболочки.
В общем случае вам нужно будет сделать:
awk '{
for (i=2; i<=NF; i++) {
sumcols[i]+= $i; sumrows+= $i
}; print $0, sumrows
}
END { for (x in sumcols)
{ printf SEP sumcols[x]; SEP=FS };
print ""
}' infile
Часть sumcols[i]+= $i
суммирует -значение поля в той же позиции столбца; и sumrows+= $i
выполняет суммирование в одной и той же позиции строк, затем строки печатаются после каждой строки, прочитанной с помощью print $0, sumrows
;
и в цикле END
над массивом sumcols и используйте printf
для печати в одной строке. SEP
устанавливается со значением по умолчанию F поля S разделителя для второго отпечатка к следующему, чтобы добавить один пробел между каждым.