次の何千もの行を含むCSVファイルがあります。
bla bla blab [FR] john is bla bla
bla [US] blue house in Chicago...
[ES] accessing the safe... bla bla
間の要素を確認してください[ ]
。これらの要素の後には、常にスペースと新しいフレーズの先頭が続きます。ファイルが次のように見えるように、スペースの後ろの最初の文字を大文字に変換したいと思います。
bla bla blab [FR] John is bla bla
bla [US] Blue house in Chicago...
[ES] Accessing the safe... bla bla
sed、awk、または他の手段を使用して端末でこれをどのように実行しますか?
解決策を説明してください。理解して学びたいです。
ありがとうございます。
ベストアンサー1
POSIXlyでは、次のことができます。
awk -F '] ' '{
out = $1
for (i = 2; i <= NF; i++)
out = out FS toupper(substr($i, 1, 1)) substr($i, 2)
print out}' < infile
または:
awk '
BEGIN {FS = OFS = "] "}
{
for (i = 2; i <= NF; i++)
$i = toupper(substr($i, 1, 1)) substr($i, 2)
print
}' < infile
これはフィールド区切り文字"] "
として定義され、F
各フィールドの最初の文字(ndから始まりフィールド番号まで)を変換してからS
フィールドを再結合します。2
NF
N
F
to
upper
(ただし、FreeBSD awk
(およびmacOS)を含む一部の実装はまだ国際化されていないため、事前設定された形式(U + 00E9)に変更(またはifに変更)することはできません。mawk
awk
[GR] π
[GR] Π
[FR] éric
[FR] Éric
é