1

一部の行のみが数字で始まるファイルがあります。これらの行で簡単な数学演算を実行したいと考えています。

たとえば、これらの行が次の形式であるとします。

010 - 0050 - 20500

そして、2番目の数値にのみ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

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 に答える
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 に答える
0

Perl はそのようなものに適したツールです。ただし、それがあなたのケースに最適なツールであるかどうかは、他の多くの考慮事項に依存します。

  • これは 1 回限りの仕事ですか、それとも同じ (または同様の) ことを定期的に行う必要がありますか?
  • Perlをもう知っていますか?すでに使い慣れている類似の言語 (Python や awk など) は他にありますか?
  • ファイルの大きさは?(5行だけなら手で!)

新しい言語を学ぶことは、たとえそれを定期的に使用する予定がなくても、決して完全な損失ではありません.

于 2013-03-30T01:54:58.290 に答える