Awk

僅將文件中的第一列轉換為小寫

  • July 19, 2021

我在 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”找到了解決方案

你能建議嗎?

這是一個簡單的方法:

$ 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

引用自:https://unix.stackexchange.com/questions/659002