我有一個文本檔案,其中包含一堆資料和行,就像SID: 1 - SN: 0123456789分散在檔案中一樣。所有行都用 CR/LF (Windows) 分隔
在 bash 中,我創建了一個具有唯一序列號的陣列:
sn=($(cat ./serials |awk '/SN: / { print $3 }' FS=': '|sort -u;))
到目前為止一切順利,但每個陣列成員最后都包含一個 CR:
echo "${sn[0]}:test"
列印:test56789而不是0123456789:test
我可以這樣修復它tr -d '\r':
sn=($(cat ./serials |tr -d '\r'|awk '/SN: / { print $3 }' FS=': '|sort -u;))
但我懷疑這是否是最好的方法。有沒有辦法洗掉awk命令中的 CR?
uj5u.com熱心網友回復:
有沒有辦法在 awk 命令中洗掉 LF?
當然你可以有這樣的awk:
awk -F ': *' '{sub(/\r$/, "")} /SN: / {print $3}' serials
awk將輸出讀入 bash 陣列的完整解決方案:
readarray -t sn < <(
awk -F ': ' '{sub(/\r$/, "")} /SN: / {print $3}' serials | sort -u)
# check bash array
declare -p sn
uj5u.com熱心網友回復:
{m,g}awk '$!NF = $3' FS=':[ ]*' RS='\r?\n'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496497.html
下一篇:bash:更改多個填充的名稱
