Сумма и столбцы в таблице номеров

Создание 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" в сценариях оболочки.

1
06.10.2018, 21:12
1 ответ

В общем случае вам нужно будет сделать:

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 разделителя для второго отпечатка к следующему, чтобы добавить один пробел между каждым.

1
27.01.2020, 23:42

Теги

Похожие вопросы