RedHatには、次のデータを含むファイルがあります。
$ cat hello.txt
mumdfw2as123v USER=wladmin MOUNTPOINT=/apps
MUMFW2as97v.mrshmc.com USER=wladmin MOUNTPOINT=/apps
MUMFW3AS65V USER=user MOUNTPOINT=DR-/u
MUMDFW3AS66V USER=oracle MOUNTPOINT=/u
mumdfw3AS69v_oracle ansible_host=mumdfw3as69v USER=oracle MOUNTPOINT=/web
最初の列だけを小文字に変換し、変更を同じファイルに保存したいと思います。
nawk
「nawk」を使って解決策を見つけたので、ツールはありません。
何か提案してもらえますか?
答え1
簡単な方法は次のとおりです。
$ awk -F'[ ]' '{$1=tolower($1)}1' file
mumdfw2as123v USER=wladmin MOUNTPOINT=/apps
mumfw2as97v.mrshmc.com USER=wladmin MOUNTPOINT=/apps
mumfw3as65v USER=user MOUNTPOINT=DR-/u
mumdfw3as66v USER=oracle MOUNTPOINT=/u
mumdfw3as69v_oracle ansible_host=mumdfw3as69v USER=oracle MOUNTPOINT=/web
これは$1
(最初のフィールド)を小文字に変更します。1
最後はawk
「この行を印刷してください」の略です。興味深いことに、-F'[ ]'
入力フィールドの区切り文字を空白に設定しましたが、これは正規表現(文字クラス)として表示されるため、awkは入力行を再計算するため、入力フィールドの元の間隔を維持できます。入力ファイル。それなしで私達は次を得ます:
$ awk '{$1=tolower($1)}1' file
mumdfw2as123v USER=wladmin MOUNTPOINT=/apps
mumfw2as97v.mrshmc.com USER=wladmin MOUNTPOINT=/apps
mumfw3as65v USER=user MOUNTPOINT=DR-/u
mumdfw3as66v USER=oracle MOUNTPOINT=/u
mumdfw3as69v_oracle ansible_host=mumdfw3as69v USER=oracle MOUNTPOINT=/web
ファイルを適切に編集するには、GNUを使用できますawk
(Linuxシステムではデフォルト)。
$ gawk -F'[ ]' -i inplace '{$1=tolower($1)}1' file
$ cat file
mumdfw2as123v USER=wladmin MOUNTPOINT=/apps
mumfw2as97v.mrshmc.com USER=wladmin MOUNTPOINT=/apps
mumfw3as65v USER=user MOUNTPOINT=DR-/u
mumdfw3as66v USER=oracle MOUNTPOINT=/u
mumdfw3as69v_oracle ansible_host=mumdfw3as69v USER=oracle MOUNTPOINT=/web
答え2
@terdonの返信より良いですが、参考のための選択肢は次のとおりです。
$ awk '{match($0,/[^[:space:]]+/); print tolower(substr($0,1,RLENGTH)) substr($0,RLENGTH+1)}' hello.txt
mumdfw2as123v USER=wladmin MOUNTPOINT=/apps
mumfw2as97v.mrshmc.com USER=wladmin MOUNTPOINT=/apps
mumfw3as65v USER=user MOUNTPOINT=DR-/u
mumdfw3as66v USER=oracle MOUNTPOINT=/u
mumdfw3as69v_oracle ansible_host=mumdfw3as69v USER=oracle MOUNTPOINT=/web
答え3
PerlまたはGNU sedの使用:
perl -pe 's/^\S+/\L$&/' file
sed -E 's/^\S+/\L&/' file
+-i
このオプションが必要な場合
答え4
このユーティリティを使用して、perl
左側に空白ではなく空白があり、右側に空白があるレコードを分割しました。効果的にフィールドの終わりを表示します。
perl -F'(?<=\S)(?=\s)' -lane '
print lc(shift(@F)), @F;
' file.csv
Pythonは、空白以外の最初の文字(IOW、最初のフィールド)を取得し、re.sub()メソッドを介して小文字に変換する別の方法でこれを行います。
python3 -c 'import re, sys
with open(sys.argv[1]) as f:
for l in f:
print(re.sub(r"\S+",lambda x:x.group(0).lower(),l,1),end="")
' file.csv