我有一个包含一堆行的文件,我想比较一下特定列的所有字符是否与 Perl 中文件的其余部分匹配。例如,如果我有一个文件:
abcdefg
avcddeg
acbdeeg
文件会将 a, d, g 读取为匹配项并返回位置。
我正在考虑在 perl 中使用 2D 数组来遍历和比较整个文件,但它可能会变得乏味。有人有更简单的方法吗?
谢谢
最佳答案
这是一个使用位运算的聪明(快速)解决方案。它依赖于 a & b & ... & z
等于 a | 的事实。乙 | ... | z
当且仅当所有 a
, b
, ..., z
都相等。
# read first line:
chomp( $_ = <> );
my $join = my $meet = $_;
# read other lines:
while( <> ) {
chomp;
$join |= $_;
$meet &= $_;
}
# print matching columns:
foreach my $i ( 0 .. length($meet) - 1 ) {
my $a = substr $join, $i, 1;
my $b = substr $meet, $i, 1;
print "$i: $a\n" if $a eq $b;
}
测试输入:
abcdefg
avcddeg
acbdeeg
输出:
0: a
3: d
6: g
附言。即使线条的长度不同,此解决方案也有效;最短行末尾之外的所有列都不会被视为匹配。
关于perl - 将一行中某个位置的字符与同一位置的其余行进行比较的简单方法(Perl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8886475/