我有一个包含不同记录数的文件,我想多次更新特定位置的值(数字)
例如 这是包含多行的文件
254235335的 63 634242423536363633
254235335的 64 634242423536363633
254232335的 66 634242423536363633
254235335的 69 634242423536363633
254232335的 70 634242423536363633
254232335的 71 634242423536363633
254235335的 65 634242423536363633
现在我想只在行的前五个值为“25423”的情况下更新每行中BOLD中的值。
因此,如果5行的前五个值为“25423”,我想将每行中BOLD中的值更新为1。
有人可以建议一种方法吗
此外,所有要更新的值都出现在修复位置。如此处的10-11。
提前感谢
答案 0 :(得分:1)
这假设您希望99 + 1变为00而不是100,并且针对您发布的输入文件进行测试,但在最后一行的关键位置使用99
而不是65
:
$ awk '/^25423/{$0=sprintf("%s%02d%s",substr($0,1,9),(substr($0,10,2)+1)%100,substr($0,12))} 1' file
25423533564634242423536363633
25423533565634242423536363633
25423233567634242423536363633
25423533570634242423536363633
25423233571634242423536363633
25423233572634242423536363633
25423533500634242423536363633
答案 1 :(得分:0)
您可以使用此sed
,
sed 's/^\(25423.\{4\}\)\([0-9]\{2\}\)/\11/g'
<强>测试强>
$ echo "25423533563634242423536363633" | sed 's/^\(25423.\{4\}\)\([0-9]\{2\}\)/\11/g'
2542353351634242423536363633
答案 2 :(得分:0)
要求救援!
awk 'BEGIN{OFS=FS=""} /^25423/ {v=10*$10+$11+1;$11=v%10;$10=((v-$11)/10)%10}1'
99之后将返回00.输出。
25423533564634242423536363633
25423533565634242423536363633
25423233567634242423536363633
25423533570634242423536363633
25423233571634242423536363633
25423233572634242423536363633
25423533566634242423536363633