Я пытаюсь сортировать своих пользователей на определенные серверы, поэтому то, что я пытаюсь сделать в данный момент, захватывает всех пользователей по полу. По сути, у меня был бы один сервер со всеми пользователями-мужчинами и один со всеми женщинами-пользователями. Данные в файле на строку читаются так:
jimlee,7676,jim lee,sony,male,8912,1543,33:44
Команда, которую я использую ниже, захватывает первое поле, а затем добавляет пользователя. Однако моя цель - добавить только определенный пол и создать для них пользователя. Поэтому, видя, как пятое поле является полем пола, я знаю, что использование -f5 даст мне это поле и отобразит всех пользователей по полу, но я не уверен, как захватить имя на основе определенной области, в этом случае пятое поле (пол).
cut -d ',' -f1 file.csv | while read line; do sudo useradd "$line"; done
Вы можете попробовать
sudo awk -F , '($5=="male") {system("useradd " $1)}' file.csv
Если вы хотите найти шаблон, и поля могут быть непоследовательными (т. е. если пол не всегда находится в 5-м поле), вы можете использовать способ sed для захвата первого поля, если female находится в любом поле, например:
sed -nr 's/^([^,]+),.*,female,.*/\1/p' file
Возможно, достаточно просто использовать цикл Bash с запятой в качестве разделителя полей и при необходимости вызвать useradd:
while IFS=, read user f2 f3 f4 gender _;
do
if [ "$gender" == "male" ]; then
sudo useradd "$user"
fi
done < file
Не нужно вызывать внешние команды, такие как awk или sed. [ ! d2]