我在“用 awk 更改字串的大小寫”中找到了我的問題的部分解決方案,@AndersJohansson 發布的命令是:
echo 'ABCD EFGH IJKL MNOP QRST UVWX' | awk '{for (i=1; i<=NF; i) { $i=toupper(substr($i,1,1)) tolower(substr($i,2)); } print }'
正如預期的那樣,結束列印Abcd Efgh Ijkl Mnop Qrst Uvwx。但是,在我的情況下,我的資料由欄位分隔,例如:ABCD EFGH; IJKL MNOP; QRST UVWX并且我只需要將命令應用于 3r(最后一個)欄位(實際上在我的資料中有 9 個欄位,但為簡單起見,我只放了 3 個)。
預期輸出: ABCD EFGH; IJKL MNOP; Qrst Uvwx
在 Stackoverflow 里面有很多相關的問題,甚至是我自己的一個(如何在 awk 捕獲的單元格中排序),我一個接一個地試圖使它們適應我的情況,但沒有成功,顯然我沒有足夠的知識awk 以克服解決方案,所以我將非常感謝解決這個問題的任何幫助......謝謝。
uj5u.com熱心網友回復:
也許是這樣的:
echo "ABCD EFGH; IJKL MNOP; QRST UVWX" |
awk '
BEGIN { FS = OFS = "; "}
{
s = "";
n = split($NF,w,/ /);
for(i=1; i<=n; i)
s = s " " toupper(substr(w[i],1,1)) tolower(substr(w[i],2))
}
{$NF = substr(s,2)}
1
'
輸出:
ABCD EFGH; IJKL MNOP; Qrst Uvwx
說明:
設定
FS為": "將awk在由": ";分隔的欄位中拆分行 在當前情況下,您將獲得三個欄位。$NF參考最后一個欄位,然后在每個空格字符上手動 拆分。for 回圈進行上/下轉換并將它們存盤在字串變數中。
然后更新最后一個欄位并列印整行;
OFS必須設定為與 相同的值FS,否則列印行時"; "將轉換為" "。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/420373.html
標籤:
上一篇:如何停止在Swift中列印終端
