テーブル列の小文字を大文字に変更

テーブル列の小文字を大文字に変更

私は次の形式でデータを収集します。

CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,sylvain,team:::admin
52,01    dec   2018,sonia,team
52,01    dec   2018,sonia,team
25,01    jan   2019,sonia,team
10,01 jan 2019,sylvain,team:::admin
8,12    jun   2018,öle,team:support

「ユーザー」列の最初の文字を大文字で書き、すべての名前が小文字の代わりに大文字で始まるようにしたいと思います。どうすればいいですか?

そして、テーブルの不要な内容を取り除いた後、列の長さを調整してきれいに整理するにはどうすればよいです:,

答え1

awkあなたのためにできること:

awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,Sylvain,team:::admin
52,01    dec   2018,Sonia,team
52,01    dec   2018,Sonia,team
25,01    jan   2019,Sonia,team
10,01 jan 2019,Sylvain,team:::admin
8,12    jun   2018,Öle,team:support

この関数substrは次の形式を持ち、substr(s, a, b)文字列sの位置aから始まりb文字を返します。パラメーターbはオプションです。指定した長さだけ文字列を分割できます。ここでは、3番目のフィールドの最初の文字だけが大文字で始まり、関数は最初の文字列、抽出substrする最初の文字の最初のインデックス、および抽出する文字数を使用します。最後の引数が欠落している場合、文字列の残りのsubstrすべての文字が使用されます。

つまり、substr($3,1,1)$3 の最初の文字substr($3,2)と残りの文字が評価されます。

不要な追加文字を削除するには、出力をsed 次のようにパイプしてcolumn列の長さを調整できます。

awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file | sed -e 's/,/\t/g' -e 's/:/ /g' | awk '{print $1, $2","$3","$4"  "$5" " $6" " $7" "$8}' | column -t
CREDITS  EXPDATE,USER,GROUPS
99       01,jun,2018          Sylvain  team  admin
52       01,dec,2018          Sonia    team
52       01,dec,2018          Sonia    team
25       01,jan,2019          Sonia    team
10       01,jan,2019          Sylvain  team  admin
8        12,jun,2018          Öle      team  support

答え2

私はゴロの提案のように多くの配管が必要ないと思います。awkスクリプトで実行する必要がありますcolumn

awk '
    {gsub (/[   ]+/, "/", $2)
     $3 = toupper(substr($3,1,1)) substr($3,2)
     gsub (/,/, "\t")
     gsub (/:+/, " ")
    }
1

' FS=, OFS=, file
CREDITS EXPDATE USER    GROUPS
99      01/jun/2018 Sylvain team admin
52      01/dec/2018 Sonia   team
52      01/dec/2018 Sonia   team
25      01/jan/2019 Sonia   team
10      01/jan/2019 Sylvain team admin
8       12/jun/2018 öle team support

関連情報