Как добавить пользователей от .csv определенным полем?

Я пытаюсь отсортировать своих пользователей в определенные серверы, поэтому что я пытаюсь сделать, в данный момент захват все пользователи полом. По существу у меня был бы один сервер со всеми штекерными пользователями и один со всеми розеточными пользователями. Данные в файле на строку считаны как так:

jimlee,7676,jim lee,sony,male,8912,1543,33:44

Команда, которую я использую ниже, захватывает первое поле и затем добавляет пользователя. Однако моя цель состоит в том, чтобы добавить определенный пол только и создать пользователя для них. Так видя, как пятое поле является гендерным полем, я знаю то использование -f5 даст мне, что поле и отобразило бы всех пользователей полом, но я не уверен, как захватить имя на основе определенного поля, в этом случае пятого поля (пол).

cut -d ',' -f1 file.csv | while read line; do sudo useradd "$line"; done
6
задан 6 February 2017 в 03:14

4 ответа

Перенесение из моего предыдущего ответа в Вашем другом вопросе , Как захватить символы перед запятой в списке и экспортировать в сценарий? , используйте awk с $FIELD == "word". Здесь штекер и розетка установлены в поле 5

awk -F',' '$5=="male" {command=sprintf("useradd \"%s\" ",$1); system(command) }' input.txt

, можно сделать то же для "розетки"

7
ответ дан 23 November 2019 в 07:18

Вы могли попробовать

sudo awk -F , '($5=="male") {system("useradd " $1)}' file.csv
7
ответ дан 23 November 2019 в 07:18

Это является, вероятно, довольно прямым для простого использования цикла Bash с запятой как разделитель полей и вызов useradd при необходимости:

while IFS=, read user f2 f3 f4 gender _;
do
    if [ "$gender" == "male" ]; then
         sudo useradd "$user"
    fi
done < file

Никакая потребность назвать внешние команды, такие как awk или sed.

2
ответ дан 23 November 2019 в 07:18

Если Вы хотите искать шаблон, и поля могут быть непоследовательными (т.е. если пол не мог бы всегда быть в 5-м поле), Вы могли бы использовать a sed способ захватить первое поле, если female находится в любом поле, например:

sed -nr 's/^([^,]+),.*,female,.*/\1/p' file

Объяснение

  • -n не печатайте, пока мы не попросим что-то
  • -r используйте ДО
  • s/old/new замена old с new
  • ^([^,]+), сохраните некоторые символы перед запятой в начале каждой строки (первое поле)
  • ,.*, любое количество любых символов, которые могли бы произойти между двумя запятыми (таким образом, не имеет значения, сколько поля там между первым полем и шаблоном),
  • ,female, строка будет только соответствовать, если этот шаблон произойдет
  • \1 сохраненный шаблон в () от ранее
  • p распечатайте только строки, которые мы изменили
2
ответ дан 23 November 2019 в 07:18

Другие вопросы по тегам:

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