web-dev-qa-db-fra.com

Comment ajouter des utilisateurs de .csv par domaine spécifique?

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
6
Danny

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"

7
Sergiy Kolodyazhnyy

Tu pourrais essayer

Sudo awk -F , '($5=="male") {system("useradd " $1)}' file.csv
7
Nick Sillito

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.

2
fedorqui

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

Explication

  • -n n'imprimez pas avant d'avoir demandé quelque chose
  • -r utilise ERE
  • s/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 de
  • p affiche uniquement les lignes que nous avons modifiées
2
Zanna