ユーザーを特定のサーバーに分類しようとしているので、現時点でしようとしているのは、性別ごとにすべてのユーザーを取得することです。基本的に、すべての男性ユーザーとすべての女性ユーザーが1つのサーバーを持つことになります。行ごとのファイルのデータは次のように読み取られます。
jimlee,7676,jim lee,sony,male,8912,1543,33:44
以下で使用しているコマンドは、最初のフィールドを取得してからユーザーを追加します。ただし、私の目標は特定の性別のみを追加し、それらのユーザーを作成することです。 5番目のフィールドが性別フィールドであることを確認すると、-f5
を使用するとそのフィールドが得られ、性別ごとにすべてのユーザーが表示されることがわかりますこの場合、5番目のフィールド(性別)。
cut -d ',' -f1 file.csv | while read line; do Sudo useradd "$line"; done
他の質問での以前の回答から引き継ぐ リスト内のコンマの前に文字を取得してスクリプトにエクスポートする方法 、$FIELD == "Word"
でawkを使用します。ここでは、フィールド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番目のフィールドにあるとは限らない場合)、sed
がfemale
の場合、最初のフィールドを取得する任意のフィールド、たとえば:
sed -nr 's/^([^,]+),.*,female,.*/\1/p' file
-n
何かを尋ねるまで印刷しない-r
EREを使用s/old/new
old
をnew
に置き換えます^([^,]+),
各行の先頭(最初のフィールド)のコンマの前にいくつかの文字を保存します,.*,
2つのコンマの間に現れる可能性のある任意の数の文字(したがって、最初のフィールドとパターンの間にフィールドがいくつあるかは関係ありません),female,
行は、このパターンが発生した場合にのみ一致します\1
以前の()
に保存されたパターンp
変更した行のみを出力します