J'essaie de classer mes utilisateurs dans des serveurs spécifiques. Ce que j'essaie de faire pour le moment, c'est de saisir tous les utilisateurs par sexe. J'aurais essentiellement un serveur avec tous les utilisateurs masculins et un avec toutes les utilisatrices. Les données du fichier par ligne sont lues comme suit:
jimlee,7676,jim lee,sony,male,8912,1543,33:44
La commande que j'utilise ci-dessous saisit le premier champ, puis ajoute l'utilisateur. Cependant, mon objectif est d’ajouter un sexe spécifique et de créer un utilisateur pour eux. Donc, vu que le cinquième champ est le champ genre, je sais qu’utiliser -f5
me donnera ce champ et affichera tous les utilisateurs par sexe, mais je ne sais pas comment saisir le nom en fonction d’un champ spécifique, dans dans ce cas, le cinquième champ (genre).
cut -d ',' -f1 file.csv | while read line; do Sudo useradd "$line"; done
Reprenant de ma réponse précédente dans votre autre question Comment saisir des caractères avant une virgule dans une liste et les exporter vers un script? , utilisez awk avec $FIELD == "Word"
. Ici les hommes et les femmes sont placés dans le champ 5
awk -F',' '$5=="male" {command=sprintf("useradd \"%s\" ",$1); system(command) }' input.txt
Vous pouvez faire la même chose pour "femme"
Tu pourrais essayer
Sudo awk -F , '($5=="male") {system("useradd " $1)}' file.csv
Il est probablement assez simple d'utiliser simplement une boucle Bash avec une virgule comme séparateur de champ et d'appeler useradd
si nécessaire:
while IFS=, read user f2 f3 f4 gender _;
do
if [ "$gender" == "male" ]; then
Sudo useradd "$user"
fi
done < file
Pas besoin d'appeler des commandes externes telles que awk ou sed.
Si vous souhaitez rechercher un motif et que les champs peuvent être incohérents (par exemple, si le genre ne figure pas toujours dans le cinquième champ), vous pouvez utiliser un moyen sed
pour saisir le premier champ si female
est dans n'importe quel champ, par exemple:
sed -nr 's/^([^,]+),.*,female,.*/\1/p' file
-n
n'imprimez pas avant d'avoir demandé quelque chose-r
utilise EREs/old/new
remplace old
par new
^([^,]+),
enregistre quelques caractères avant une virgule au début de chaque ligne (le premier champ),.*,
n'importe quel nombre de caractères pouvant apparaître entre deux virgules (le nombre de champs entre le premier et le modèle n'a donc pas d'importance),female,
la ligne ne correspondra que si ce motif se produit\1
le motif enregistré dans ()
à partir dep
affiche uniquement les lignes que nous avons modifiées