私は次の形式でデータを収集します。
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