为什么我的Perl脚本无法打印带有行号的行?
我打算打开一个文本文件并读取行。并在前面添加字母“pp”和行号 文本文件如下所示 39828513 39829926 1413 hsa-mir-6719 41252946 41254434 1488 hsa-mir-6889 62331112 62332604 1492 hsa-mir-4758 39828513 39829926 1413 hsa-mir-6719 41252946 41254434 1488 hsa-mir-6889 62331112 62332604 1492 hsa-mir-4758 我想得到如下输出: pp1 39828513 39829926 1413 hsa-mir-6719 pp2 41252946 41254434 1488 hsa-mir-6889 pp3 62331112 62332604 1492 hsa-mir-4758 pp1 39828513 39829926 1413 hsa-mir-6719 pp2 41252946 41254434 1488 hsa-mir-6889 pp3 62331112 62332604 1492 hsa-mir-4758 我已经写了一个代码,但我觉得它工作不好为什么我的Perl脚本无法打印带有行号的行?,perl,file-io,Perl,File Io,我打算打开一个文本文件并读取行。并在前面添加字母“pp”和行号 文本文件如下所示 39828513 39829926 1413 hsa-mir-6719 41252946 41254434 1488 hsa-mir-6889 62331112 62332604 1492 hsa-mir-4758 39828513 39829926 1413 hsa-mir-6719 41252946 41254434 1488 hsa-mir-6889 62331112 62332604 1492 hsa-mi
use strict;
use warnings;
open (fh, " < file.txt") || die ;
while ($line=<fh>)
{
chomp ($line);
for (my $i=1; $i <= ($#line); $i++)
{
print "pp$i\t$line";
}
}
使用严格;
使用警告;
打开(fh,“ 对于(my$i=1;$i利用$。
变量:
print "pp$. $_" while <>;
同时打印“pp$.$”;
首先,当您使用而($line=)
读取文件时,您一次读取一行文件,因此不需要使用for
循环
第二,使用时,必须声明变量。最好在尽可能小的范围内声明变量。当使用诸如fh
之类的裸字文件句柄时,您正在为包创建一个全局变量。这可能会在一定距离内创建操作
因此,您可以在(my$line=…)
时使用和
您不需要在每一行中都添加换行符,因为打印时仍然需要添加换行符
Perl的内置变量提供上次访问的文件句柄的当前行号
最后,如果open
失败,您应该打印变量,以便找出失败的原因
use strict;
use warnings;
# If provided, use first command line argument
# for file name.
my $filename = @ARGV ? $ARGV[0] : 'file.txt';
open my $fh, '<', $filename
or die "Failed to open '$filename': $!";
while (my $line = <$fh>) {
print "pp$.\t", $line;
}
命令行上的Perl one liner就是您所需要的:
Linux/OSX:
$ perl -ne 'print "pp$. $_"' infile > outfile
窗口:
> perl -ne "print qq(pp$. $_)" infile > outfile
只需将infle
和outfile
替换为您想要读取和写入的文件名。如果outfile
不存在,它将自动创建它。如果它已经存在,它将覆盖它。确实需要perl吗?实际上不需要perl,但我正在尝试完善我的perl程序我是perl新手,还在学习cat-n file.txt
(也可以在perlvar
中查找$。
)@Sobriquecat-n file.txt | sed-e's/^[\t]*\([0-9]\+\)\t/pp\1/'
来匹配请求!;-)使用类似的用法:cat-myfile | perl-pe'print“pp$”“
@xtofl避免无用的cat
!使用:perl-pe”print“pp$”“'perl-pe”print“pp$”$。
我使用了内置的$。代码工作非常好。当“while”读取所有行时,建议不要使用for循环。
> perl -ne "print qq(pp$. $_)" infile > outfile