0

私は以下のように持っFile1File2います。同様の質問を見つけましたが、まったく同じではありません。

File1行を の入力として使用しgrep、 の 1 列目を抽出しますFile2。以下のおもちゃの例では、column2 が にFile2等しい場合、aまたはbに書き込み1ますFile_ab

これまでのところ、私は二重ループを使用しており、推定時間は 4 日です。私は次のようなものを得たいと思っていました:cat File1 | xargs -P 12 -exec grep "$1\|$2" File2 > File_$1$2.txt しかし、構文を正しくすることができませんでした。greps条件と並行して12 を実行しようとしていORます。

File1
a b
c d

File2
1 a
2 b
3 c
1 d
4 a
5 e
6 d

必要な出力は、File_ab と File_cd の 2 つのファイルです。

File_ab
1
2
4
File_cd
1
3
6

注: MyFile1は 25K 行で、File210Mln 行です。

4

1 に答える 1

1

パールを使用:

#!/usr/bin/perl                                                                                               

use FileCache;

@a=`cat File1`;
chomp(@a);
for $a (@a) {
    @parts = split/ +/,$a;
    push @re, @parts;
    for $p (@parts) {
    $file{$p} = "File_".join "",@parts;
    }
}

$re = join("|",@re);

while(<>) {
    if(/(\d+).*($re)/o and $file{$2}) {
    $fh = cacheout $file{$2};
    print $fh $1,"\n";
    }
}

それで:

chmod 755 myscript
./myscript File2
于 2013-07-30T16:35:01.073 に答える