我有一个每行45个字符的文件 例如:
123456789123456789123456789123456789123456789
我需要在每行的第10到第15个字符之间剪切数字,并将其与1000相加。现在我需要将结果放在相同的字符长度(比如10到15之间)。
如果 12345 是一行中第10到第15个字符之间的5个数字,我需要为其添加1000,因此该值将为 13345 。
所以我需要在同一个位置替换ans。
最终结果:
123456789133456789123456789
请使用unix建议。
答案 0 :(得分:3)
这是使用Shell Parameter Expansion完成此任务的方法:
while read line; do
echo "${line:0:9}$((${line:9:5} + 1000))${line:14}"
done < file
它只需要线的相关部分并处理它们。它使用子串扩展:
$ {参数:偏移}
$ {参数:偏移量:长度}
从offset指定的字符开始扩展为参数的最大长度字符。如果省略length,则展开从offset指定的字符开始的参数的子字符串。 length和offset是算术表达式(参见Shell Arithmetic)。这称为子字符串扩展。
引用:
我需要从每行的第16个字符到第20个字符获取字符值。我需要为该数字添加10000,并将结果放在同一行的两个位置,1。从第16到第20个字符。 2.从第6到第10个字符。
例如:
i / p 1111122222333334444455555
o / p 1111154444333345444455555。
过程:第16至第20个字符:44444
添加10000:54444(结果)
(必须将此结果放在如上所述的2个位置)。
行中的其余值应该是原样。
while read line; do
A1=${line:0:5}
#A2=${line:5:5}
A3=${line:10:5}
A4=${line:15:5}
A5=${line:20}
result=$((A4+10000))
echo "$A1$result$A3$result$A5"
done < file
它只是从行中保存子串,然后相应地处理它们:
1111122222333334444455555
<---><---><---><---><--->
A1 A2 A3 A4 A5
请注意,您不需要$A2
,所以,我刚评论过它
我希望它现在有所帮助。