下面是我的示例文件(第1列和第2列用标签分隔)
P49418"\t"O43426
P49418"\t"O43426
O43426"\t"P49418
......
对于上面给出的三对,我只需要一名代表。
P49418"\t"O43426
需要对文件的其余部分执行类似的操作。如何使用awk
或Perl执行?
答案 0 :(得分:3)
在完成读取输入数据之后,您可以使用哈希表来记录您目前看来的项目,只输出该哈希表的键。
如果您想保留项目的顺序,则需要额外的列表来累积结果。
试试这个:
#!/usr/bin/perl
use strict;
use warnings;
my %record;
while (<DATA>) {
chomp;
my @field = split;
$record{join " ", sort { $b cmp $a } @field} = 1;
}
foreach my $r (keys %record) {
print "$r\n";
}
__DATA__
P49418 O43426
P49418 O43426
O43426 P49418
答案 1 :(得分:1)
此awk
应该有效:
awk -F'\t' '!a[$1,$2]++ && !a[$2,$1]++' file
使用两个字段作为数组的键并检查重复项。
$ cat file
P49418 O43426
P49418 O43426
O43426 P49418
$ awk -F'\t' '!a[$1,$2]++ && !a[$2,$1]++' file
P49418 O43426