一部の行のみが数字で始まるファイルがあります。これらの行で簡単な数学演算を実行したいと考えています。
たとえば、これらの行が次の形式であるとします。
010 - 0050 - 20500
そして、2番目の数値にのみ100を追加したい:
010 - 0150 - 20500
perl
最高のツールですか?
一部の行のみが数字で始まるファイルがあります。これらの行で簡単な数学演算を実行したいと考えています。
たとえば、これらの行が次の形式であるとします。
010 - 0050 - 20500
そして、2番目の数値にのみ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;
}
変更したい行以外を台無しにすることはありません。また、他のソリューションが行っているように、行の他の部分を台無しにすることもありません。
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 では、これはそれほど難しくありません。
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 $_;
}
}
Perl はそのようなものに適したツールです。ただし、それがあなたのケースに最適なツールであるかどうかは、他の多くの考慮事項に依存します。
新しい言語を学ぶことは、たとえそれを定期的に使用する予定がなくても、決して完全な損失ではありません.