b*****d 发帖数: 24 | 1 我有很多个(几百个)文本文件file1,file2,...filem,每个文件中都有100个这样的
字符串,'step n',n是一个占用8个字符的整数,具体数值不确定,该字符串在所在行
的开头。
我现在需要做这样处理,把文件filem中的每个'step n' 字符串的数字n都替换为数字n
+m*100。我想写shell script来完成,不知道怎么实现,请高手指教。我试了:
sed 's/^step\(.\{8\}\)/step$(\1+500)'
但是不起作用。关键是我只不知道怎么把\1得到的字符串转化为整数,在做计算,不知
道sed有没有这样的功能。
Thx! |
i*****f 发帖数: 578 | 2 The following python code should do:
#!/usr/bin/env python
m = 200
for i in range(1, m+1):
b1 = open("file%d"%i).readlines()
b2 = []
for line in b1:
n = int(line.split()[1])
b2.append("step %d" % n+i*100)
open("file%d_new"%i, "w").writelines(b2)
Ugly, but should work. I don't test it though. This can also be done by sed+
sh or awk, but I'm not familiar with the latter.
字n
【在 b*****d 的大作中提到】 : 我有很多个(几百个)文本文件file1,file2,...filem,每个文件中都有100个这样的 : 字符串,'step n',n是一个占用8个字符的整数,具体数值不确定,该字符串在所在行 : 的开头。 : 我现在需要做这样处理,把文件filem中的每个'step n' 字符串的数字n都替换为数字n : +m*100。我想写shell script来完成,不知道怎么实现,请高手指教。我试了: : sed 's/^step\(.\{8\}\)/step$(\1+500)' : 但是不起作用。关键是我只不知道怎么把\1得到的字符串转化为整数,在做计算,不知 : 道sed有没有这样的功能。 : Thx!
|
o**n 发帖数: 1249 | 3 I like python over shell script :)
【在 i*****f 的大作中提到】 : The following python code should do: : #!/usr/bin/env python : m = 200 : for i in range(1, m+1): : b1 = open("file%d"%i).readlines() : b2 = [] : for line in b1: : n = int(line.split()[1]) : b2.append("step %d" % n+i*100) : open("file%d_new"%i, "w").writelines(b2)
|
S***w 发帖数: 1014 | 4 牛
【在 i*****f 的大作中提到】 : The following python code should do: : #!/usr/bin/env python : m = 200 : for i in range(1, m+1): : b1 = open("file%d"%i).readlines() : b2 = [] : for line in b1: : n = int(line.split()[1]) : b2.append("step %d" % n+i*100) : open("file%d_new"%i, "w").writelines(b2)
|
E*V 发帖数: 17544 | 5 用sed应该可以实现吧?
【在 i*****f 的大作中提到】 : The following python code should do: : #!/usr/bin/env python : m = 200 : for i in range(1, m+1): : b1 = open("file%d"%i).readlines() : b2 = [] : for line in b1: : n = int(line.split()[1]) : b2.append("step %d" % n+i*100) : open("file%d_new"%i, "w").writelines(b2)
|
b*****d 发帖数: 24 | 6 Thanks
【在 i*****f 的大作中提到】 : The following python code should do: : #!/usr/bin/env python : m = 200 : for i in range(1, m+1): : b1 = open("file%d"%i).readlines() : b2 = [] : for line in b1: : n = int(line.split()[1]) : b2.append("step %d" % n+i*100) : open("file%d_new"%i, "w").writelines(b2)
|
h**u 发帖数: 19 | 7 Try this:
cat file100|perl -pe 's/^step (\d+)/step .($1+100)/e;' |