ユーザー名、テーブル内の場所、設定する新しい値を受け取るには、関数を設定する必要があります。テーブルセットは
user:value1:value2:value3
置換を使用する方法を知っていますが、awk '{gsub...
特定のユーザーにそれを割り当てる方法がわかりません。
答え1
まず問題のファイルが/etc/passwd
、いいえこのソリューションを使用してくださいusermod
。
newvalue2
3番目のフィールドをforに変換するとしますuser007
。次のことができます。
awk -F: -v OFS=: '$1 == "user007" {$3 = "newvalue2"} {print}' inputfile > outputfile
これを行うために特別にシェル機能を設定したい場合は、これを行うことができます。 (個人的には気にしません。)
myfunc() {
[ "$#" -eq 2 ] ||
{ printf '%s\n' 'Usage: myfunc <USER> <GPA>' 'Assigns given GPA to USER (in column 5 of "~/students.dat")'
return 1;}
local mytempfile
mytempfile="$(mktemp)"
awk -F: -v OFS=: -v user="$1" -v gpa="$2" '$1 == user {$5 = gpa} {print}' ~/students.dat > "$mytempfile" &&
mv "$mytempfile" ~/students.dat
}
ただし、これは実際のデータに対して実行する作業ではなく、一時的なまたは「おもちゃ」のデータにのみ適用され、私以外は誰にも役に立ちません。思ったよりはるかに脆弱です。 CSVは適切なデータベースを置き換えることはできません。
CSVベースのソリューションを使用している場合は、少なくとも上記のものよりも定期的なバックアップとより良いエラーチェックがあることを確認してください。たとえば、提供された「ユーザー」名を検証したり、CSVエラーがあるかどうかを確認したりできます。ファイルにユーザーが見つからない場合、または提供されたGPAでデータ整合性チェック(スコープチェックなど)が行われた場合に発生します。ただし、これらすべての作業は、実際のデータベースを使用して実行するのが最善です。
あなたはできますPostgreSQLサンドボックス設定とても簡単そして、それを使用して、実際のデータベースとそれを介してできることについて詳しく学んでください。