【发布时间】:2014-12-12 03:18:34
【问题描述】:
我有一个如下图所示的fileA:
file A
chr1 123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
....
我有一堆相似的文件,在 dirB 中有相似的列,我必须与文件 A 进行比较。
为此,我使用 cat 将 dirB 中的所有文件连接到一个名为 fileB 的文件中,然后根据键列 1 和 2 比较这两个文件,如下所示:
awk 'FNR==NR{a[$1,$2]++;next}!a[$1,$2]' fileB fileA
此命令使用第 1 列和第 2 列作为键,并给出仅在 fileA 中具有键的行。
但是,这里的问题是,当存在大量文件时,fileB 在运行的空间和内存方面非常庞大。
有人可以提出一个替代方案,这样它就可以跳过连接所有文件以创建 fileB 的步骤。相反,fileA 可以直接与 dirB 中的所有文件进行比较
chr1 123 aa b c d xxxx abcd
chr1 234 a b c d
chr1 345 aa b c d yyyy defg
chr1 456 a b c d
【问题讨论】:
-
fileA 有多大?数百万行?几十万?数十亿?
-
你的文件名在你的
awk命令中肯定是错误的,不是吗?你不能用awk 'FNR==NR{...}...' fileA dirB/*吗? -
顺序很好,因为我想获得 fileA 中不在 fileB 中的唯一行。我使用了你建议的方式 dirB/* 不起作用。