Как добавить пользователей из .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
1
задан 6 February 2017 в 14:14

3 ответа

Вы можете попробовать

sudo awk -F , '($5=="male") {system("useradd " $1)}' file.csv
7
ответ дан 23 May 2018 в 01:44

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

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

Объяснение

-n не печатается, пока мы не попросим что-нибудь -r использовать ERE s/old/new заменить old на new ^([^,]+), сохранить некоторые символы перед запятой в начале каждой строки (первое поле) ,.*, любое число любых символов, которые могут встречаться между двумя запятыми (так что неважно, сколько полей существует между первым поле и шаблон) ,female, строка будет соответствовать только, если этот шаблон возник \1 сохраненный шаблон в () из более раннего p печатает только строки, которые мы изменили
2
ответ дан 23 May 2018 в 01:44

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

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

Не нужно вызывать внешние команды, такие как awk или sed. [ ! d2]

2
ответ дан 23 May 2018 в 01:44

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

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