【发布时间】:2011-10-09 07:39:27
【问题描述】:
我有一个制表符分隔的文本文件。我已将其拆分为列。前 2 列中的每一列都包含一个 ID 号。
我想保留 ID 号以 P 或 Q 开头的所有行,并删除第 1 或第 2 列具有任何其他 ID 或为空白的任何其他行。
例如。所以要保留的列将是这样的:P12345 或 Q12345。要删除的列将是 GAG123、CH123 等,或者只是空白。
我不知道该怎么做。我尝试将行拆分为数组和 grep /^[PQ]/elements [0] 和 [1] 以及其他各种东西,但我一定是做错了什么。
我从 TLP 尝试了以下代码,但它不起作用,我知道我一定是做错了什么:
#!/usr/bin/perl
use warnings;
use strict;
open(FILE,"<myfile.txt");
my @LINES = <FILE>;
open(my $outfile, '>', 'changedtxt');
my @wanted;
while (<FILE>) {
my @fields = split('\t', $_);
if ( $fields[0] =~ /^[PQ]/ and $fields[1] =~ /^[PQ]/ ) {
push @wanted, $_;
print {$outfile} $_;
}
}
exit:
【问题讨论】:
-
请发布您目前拥有的代码。
-
到目前为止你得到了什么代码?
-
如果一个 ID 以 P 或 Q 开头,而另一个 ID 不以 P 或 Q 开头怎么办?
-
由于您将文件 slurp 到
@LINES,因此 while 循环不会运行。如果您删除该行,它应该可以工作。虽然您不需要显式打开文件,但只需使用 shell 重定向,例如script.pl input.txt > output.txt. -
效果很好,非常感谢!