使用多个数值更新单行的值

时间:2015-09-24 14:10:03

标签: unix sed

我有一个包含不同记录数的文件,我想多次更新特定位置的值(数字)

例如 这是包含多行的文件

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。

提前感谢

3 个答案:

答案 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