Удаление строк в наборе данных, соответствующих значению из отдельного набора данных - PullRequest
0 голосов
/ 10 мая 2019

У меня возникли некоторые сложности с сопоставлением строк друг с другом, и мне было интересно, если кто-то может протянуть руку?

Скажите, у меня есть следующая таблица:

broken
vector
unidentified
synthetic
artificial

И у меня естьвторой набор данных, который выглядит следующим образом:

org1    Fish
org2    Amphibian
org3    vector
org4    synthetic species
org5    Mammal

Теперь я хочу удалить все строки из второй таблицы, которые соответствуют строке из первой таблицы, чтобы выходные данные выглядели так:

org1    Fish
org2    Amphibian
org5    Mammal 

Я думал об использовании grep -v в bash, но я не совсем уверен, как заставить его перебрать все строки в таблице 1.

Я пытаюсь решить это в perl, но дляпо какой-то причине он возвращает все мои значения, а не только те, которые совпадают.Есть идеи почему?

Мой сценарий выглядит так:

#!/bin/perl -w

($br_str, $dataset) = @ARGV;
open($fh, "<", $br_str) || die "Could not open file $br_str/n $!";

while (<$fh>) {
        $str = $_;
        push @strings, $str;
        next;
    }

open($fh2, "<", $dataset) || die "Could not open file $dataset $!/n";

while (<$fh2>) {
    chomp;
    @tmp = split /\t/, $_;
    $groups = $tmp[1];
    foreach $str(@strings){
        if ($str ne $groups){
            @working_lines = @tmp;
            next;
        }
    }
        print "@working_lines\n";
}

1 Ответ

2 голосов
/ 10 мая 2019

chomp ваш ввод и использовать хеш для вашей первой таблицы:

use warnings;
use strict;

my ( $br_str, $dataset ) = @ARGV;
open(my $fh, "<", $br_str ) || die "Could not open file $br_str/n $!";

my %strings;
while (<$fh>) {
    chomp;
    $strings{$_}++;
}

open(my $fh2, "<", $dataset ) || die "Could not open file $dataset $!/n";
while (<$fh2>) {
    chomp;
    my @tmp = split /\s+/, $_;
    my $groups = $tmp[1];
    print "$_\n" unless exists $strings{$groups};
}

Обратите внимание, что я использовал \s+ вместо \t, просто для упрощения копирования / вставки.

...