Использование AWK для извлечения чисел из файла .CSV

Обе программы являются suid root. Нет причин когда-либо вводить sudo su , за исключением ситуации, когда человек не знаком с параметрами -i и -E для sudo или иным образом в привычка делать что-то как root, не понимая, почему это делается. Команды su проходят через несколько жестко запрограммированных переменных среды (или, в последних версиях Linux, можно использовать -p для прохождения через всю среду), в то время как sudo может точно контролировать, какие переменные проходят (попробуйте ] $ DISPLAY для полезного примера). Команда su может запрашивать только пароль целевого пользователя (при условии использования стека pam по умолчанию), в то время как sudo может быть настроен на аутентификацию как исходный или целевой пользователь, либо ни один, либо всегда root - и может делать это для каждой команды. Команда su сбрасывает $ HOME , а sudo может принять решение на основе доступного набора правил. И это еще один разветвленный процесс, который не должен существовать. Между тем, sudo регистрирует выполняемые команды, так что если вы не просто выполняете sudo -i или иным образом запускаете оболочку, вы можете получить способ лучшего контрольного журнала с судо. Когда вы запускаете команду с помощью sudo, она удаляет оба . и пустые элементы в $ PATH, а затем проверяет наличие последних, не позволяя людям вставить сценарий оболочки с именем «ls» в / tmp и тому подобные махинации. :)

По сути, sudo su - это все равно что прибить одну руку к спине sudo и ничего не получить. :)

0
16.03.2018, 22:20
3 ответа

Использование настоящего синтаксического анализатора csv в оболочке :

#!/bin/bash

csvcut -c 1,2 -d, file.csv |
while IFS=, read -r c1 c2; do
    echo $((c1 * c2)) # do some arithmetic with variables c1 & c2
done

Проверить csvkit

2
28.01.2020, 02:23

Единственный способ решить эту проблему, переключаясь между awk и оболочкой, — позволить сценариям AWK генерировать код оболочки для следующего шага. Но это звучит слишком сложно для меня. Я также рекомендовал бы перенести все в awk (или здесь можно использовать и perl?)

1
28.01.2020, 02:23

Это достаточно просто сделать в bashи других оболочках:

while IFS=, read a b c d e ; do
  your_stuff
  done < your_csv_file
  1. IFS — это разделитель полей ввода. установите для команды readтолько запятую.

  2. читать пять переменных одновременно.

  3. Сделайте что-нибудь с вашими новыми переменными оболочки $a $b $c $d $e.

  4. Вы должны определить направление ввода относительно -в конце цикла whileпосле ключевого слова done.

0
28.01.2020, 02:23

Теги

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