1

我有一个文件,其中只有一些行以数字开头。我想在这些行中执行简单的数学运算。

例如,假设这些行采用以下格式:

010 - 0050 - 20500

我只想将 100 添加到第二个数字:

010 - 0150 - 20500

perl最好的工具吗?

4

4 回答 4

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;
}

除了您要更改的行之外,它不会弄乱任何行,并且不会像其他解决方案那样弄乱行的任何其他部分。

于 2013-03-30T02:48:35.903 回答
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 $_;
    }
}
于 2013-03-30T01:54:48.433 回答
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 包含所需的结果。请原谅任何错误,因为我无法测试该代码。希望这有帮助!

于 2013-03-30T02:18:57.233 回答
0

Perl 是一个很好的工具,是的。但是,如果它是案例的最佳工具,则取决于许多其他考虑:

  • 这是一次性的工作,还是您必须定期做相同(或类似)的事情?
  • 你已经知道 Perl 了吗?是否有其他类似的语言(如 Python 或 awk),您已经习惯了?
  • 文件有多大?(如果只有 5 行,请手动完成!)

学习一门新语言永远不会完全失去,即使您不希望经常使用它。

于 2013-03-30T01:54:58.290 回答