我正在撰寫一個 bash 腳本,我想在其中將第一個數字替換為 0 和 92,如果沒有 0 和 92,則在該數字前面附加 92 并將其保存在一個新檔案中。
任何幫助,將不勝感激。
下面是我的 bash 腳本:
廢料.sh
#!/bin/bash
file=test.txt
while IFS=, read -r field1
do
echo $field1 | awk '$0*=1'>> test2.txt
done < $file
測驗.txt
03333333333
3848123249
預期產出
923333333333
923848123249
uj5u.com熱心網友回復:
只需 bash 引數擴展:
$ while IFS= read -r line; do printf '92%s\n' "${line#0}"; done < test.txt
923333333333
923848123249
${line#0}僅當它存在時才洗掉前導零。
https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion
uj5u.com熱心網友回復:
使用您顯示的示例,請嘗試以下awk代碼。
awk '{$0=substr($0,1,1)==0?"92" substr($0,2):"92" $0} 1' Input_file
解釋:簡單的解釋是,使用awk'substr函式從當前行獲取子字串。在根據條件awk將值重新分配給當前行(主程式中$0檢查條件,如果第一個字符是0然后$0的92行的其余部分加上 92 之前$0。最后提到1將列印當前編輯/未編輯的行。
uj5u.com熱心網友回復:
假設這是您的輸入檔案:
cat file
03333333333
92123456789
3848123249
你可以使用這個sed:
sed -E '/^92/!s/0|^/92/' file
923333333333
92123456789
923848123249
sed命令詳情:
/^92/!對不以開頭的行執行此操作92/0|^/: 匹配第一個 0 或一行的開始位置/92/: 替換92為起始位置
等效的awk將是:
awk '!/^92/ {sub(/0|^/, "92")} 1' file
uj5u.com熱心網友回復:
我更喜歡帶有安全檢查的解決方案:
- (確認在
gawk 5.11mawk 1.3.4mawk 1.9.9.6macOS上作業nawk)
[nmg]awk '(/[1-9]/)*sub("^0?",92)'
原因是,awk '!/^92/ {sub(/0|^/, "92")} 1'如上所述的解決方案將導致額外的空行以及只有零的行獲得 92(除非這是所需的效果))
IE
03333333333
3848123249
0
變成
923333333333
923848123249
92
92
如果您想修剪所有前導零(而不是其中的 1 個,并且只想要具有非零數字的行,并且根本不關心nawk,那么它更簡單:
mawk2 '/[1-9]/*sub("^0*",92)'
or
mawk2 '(1<NF)*sub("^0*",92)' FS='[1-9]'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/453164.html
下一篇:什么是參考命令?
