我有一個檔案,其中選項 11 包含以下引數
FP6000
我需要每次增加最后 4 位數字 1 并用新數字覆寫腳本的內容
所以增加到 FP6001
我過去使用過以下效果很好但這些都是數字沒有字母
awk '{$11=$11 1}1' $FILE > tmp && mv tmp $FILE
我在這里缺少什么?
uj5u.com熱心網友回復:
使用這樣的任何版本awk:
s='FP6000'
awk '{f=$1; sub(/[0-9] $/, "", f); sub(/^[^0-9]*/, "", $1); print f ($1 1)}' <<< "$s"
FP6001
我們存盤$1在變數中,f然后最后洗掉所有數字。從$1我們從一開始就去掉所有非數字,然后附加f并$1 1一起列印。
uj5u.com熱心網友回復:
如果您只列印,$11 1您會得到1“FP6000”是一個字串,當您向其添加 1 時,其值為 0。
使用gnu awk具有 2 個捕獲組的正則運算式的變體,將欄位 11 設定為第一個組,該組匹配所有直到最后一位數字,然后是組 2 的遞增值
(.*[^0-9])?([0-9] )$
(.*[^0-9])?可選的捕獲組 1,匹配所有直到最后一次出現非數字([0-9] )捕獲第 2 組,匹配 1 個或多個數字$字串結束
由于第一組是可選的,如果只有數字,它也可以作業。
awk 'match($11,/(.*[^0-9])?([0-9] )$/,a) {$11=a[1]( a[2])}1' $FILE > tmp && mv tmp $FILE
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/327238.html
