我有一个文件,其中只有一些行以数字开头。我想在这些行中执行简单的数学运算。
例如,假设这些行采用以下格式:
010 - 0050 - 20500
我只想将 100 添加到第二个数字:
010 - 0150 - 20500
是perl
最好的工具吗?
我有一个文件,其中只有一些行以数字开头。我想在这些行中执行简单的数学运算。
例如,假设这些行采用以下格式:
010 - 0050 - 20500
我只想将 100 添加到第二个数字:
010 - 0150 - 20500
是perl
最好的工具吗?
# 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;
}
除了您要更改的行之外,它不会弄乱任何行,并且不会像其他解决方案那样弄乱行的任何其他部分。
在 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 $_;
}
}
在 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 包含所需的结果。请原谅任何错误,因为我无法测试该代码。希望这有帮助!
Perl 是一个很好的工具,是的。但是,如果它是您案例的最佳工具,则取决于许多其他考虑:
学习一门新语言永远不会完全失去,即使您不希望经常使用它。