我在公共目录(/ home / test)中有许多文件,其名称为:
ABC_1_20110508.out
ABC_1_20110509.out
ABC_1_20110510.out
..
每个文本文件都有一条如下所示的记录:
(count, 553076)
我想删除这些数字,然后将它们一次列在一个文件中。
553076
1005
7778000
...
有人可以告诉我如何使用perl执行此操作吗?
答案 0 :(得分:3)
使用此正则表达式:
/\(\w+, (\d+)\)/
您还可以使用魔术菱形运算符一次迭代所有文件:
while (<>) {
# extract the number
/\(\w+, (\d+)\)/;
# print it out
print $1, "\n";
}
如果您的perl脚本被称为myscript.pl
,您可以这样调用它:
$ myscript.pl /home/test/ABC_1_*.out
答案 1 :(得分:2)
对我来说听起来像是一个单行:
$ perl -wne '/(\d+)/ && print "$1\n"' *.out > out.txt
答案 2 :(得分:0)
最简单的方法是使用<>
运算符。在调用不带参数的perl程序时,<>
就像<STDIN>
一样。如果您将其称为参数,<>
将为您提供@ARGV
中每个文件的内容,而无需您手动管理文件句柄。
例如:./your_script.pl /home/test/ABC_1_????????.out
或cat /home/test/ABC_1_????????.out | ./your_script.pl
。这些会产生同样的效果。