我有一个文件,其中只有一些行以数字开头。我想在这些行中执行简单的数学运算。
例如,假设这些行采用以下格式:
010 - 0050 - 20500
我想只将100添加到第二个数字:
010 - 0150 - 20500
perl
是最好的工具吗?
答案 0 :(得分:3)
# 5.10+
perl -pe's/^[0-9]+ - \K([0-9]+)/ sprintf "%04d", $1 + 100 /e'
# Backwards compatible
perl -pe's/^([0-9]+ - )([0-9]+)/ $1 . sprintf "%04d", $2 + 100 /e'
用法:
perl -pe'...' file # From file
perl -pe'...' <file # From STDIN
perl -i~ -pe'...' file # Modifying in place with backup
perl -i -pe'...' file # Modifying in place without backup
如果你喜欢一个独立的程序,上面的内容只相当于:
while (<>) {
s/^[0-9]+ - \K([0-9]+)/ sprintf "%04d", $1 + 100 /e;
print;
}
除了你想要改变的行之外,它不会乱掉任何行,并且它不会像其他解决方案那样混乱行的任何其他部分。
答案 1 :(得分:1)
在Perl中,这并不太难。
open my $fh, "<", "filename" or die $!;
while (<$fh>) {
if ($_ =~ /(\d{3}) - (\d{4}) - (\d{5})/) {
printf "%.3d - %.4d - %.5d\n", $1, $2 + 100, $3;
} else {
print $_;
}
}
答案 2 :(得分:1)
在Python中:
fp = open("yourfile.txt","r")
for line in fp.readlines():
for i in range(0,9):
if line.startswith(str(i)):
elems = line.split(" - ")
elems[1] = "0"+str(int(elems[1]+100))
whatyouneed = " - ".join(elems)
Whatyouneed包含所需的结果。请原谅任何错误,因为我无法测试该代码。希望这有帮助!
答案 3 :(得分:0)
Perl是一个很好的工具,是的,是的。但如果它是 案例的最佳工具,则取决于许多其他因素:
即使您不希望定期使用新语言,学习新语言也绝不会完全失去。