web-dev-qa-db-ja.com

特定のフィールドで.csvからユーザーを追加する方法は?

ユーザーを特定のサーバーに分類しようとしているので、現時点でしようとしているのは、性別ごとにすべてのユーザーを取得することです。基本的に、すべての男性ユーザーとすべての女性ユーザーが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
6
Danny

他の質問での以前の回答から引き継ぐ リスト内のコンマの前に文字を取得してスクリプトにエクスポートする方法$FIELD == "Word"でawkを使用します。ここでは、フィールド5に男性と女性が設定されています

awk -F',' '$5=="male" {command=sprintf("useradd \"%s\" ",$1); system(command) }' input.txt

「女性」でも同じことができます

7

試すことができます

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

フィールド区切り記号 としてカンマを使用してBashループを使用し、必要に応じてuseraddを呼び出すことは、おそらく非常に簡単です。

while IFS=, read user f2 f3 f4 gender _;
do
    if [ "$gender" == "male" ]; then
         Sudo useradd "$user"
    fi
done < file

Awkやsedなどの外部コマンドを呼び出す必要はありません。

2
fedorqui

パターンを検索したい場合、フィールドに一貫性がない場合(つまり、性別が常に5番目のフィールドにあるとは限らない場合)、sedfemaleの場合、最初のフィールドを取得する任意のフィールド、たとえば:

sed -nr 's/^([^,]+),.*,female,.*/\1/p' file

説明

  • -n何かを尋ねるまで印刷しない
  • -r EREを使用
  • s/old/newoldnewに置き換えます
  • ^([^,]+),各行の先頭(最初のフィールド)のコンマの前にいくつかの文字を保存します
  • ,.*, 2つのコンマの間に現れる可能性のある任意の数の文字(したがって、最初のフィールドとパターンの間にフィールドがいくつあるかは関係ありません)
  • ,female,行は、このパターンが発生した場合にのみ一致します
  • \1以前の()に保存されたパターン
  • p変更した行のみを出力します
2
Zanna