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