我有几个非常大(几千兆字节)制表符分隔文件,其中包含命名行(4.5e6行)和列(范围从10到几百)。
IE中。 的 InputFile1.txt
A B C D
Row1 1 2 1 3
Row2 2 4 5 3
Row3 3 6 6 4
Row4 4 8 9 4
Row5 5 2 0 1
InputFile2.txt
E F G
Row1 7 1 5
Row2 7 5 5
Row3 6 4 7
Row4 5 4 8
Row5 4 9 0
我还有两个索引文件,一个用于行,一个用于列。即:
IndexRows.txt (所有这些行都将出现在所有文件中)
Row1
Row3
Row4
IndexCols.txt (文件中没有重复的列)
B
C
F
我想从制表符分隔文件中有效地提取索引文件中指定的行和列,然后将所有列合并到一个文件中。我对R有经验并且能够使用R来做到这一点,但是这些文件非常大,使用R将会推动极限/如果可能的话。
有人能建议一种有效的方法,使用bash / awk 吗?
在此示例中,输出如下所示:
B C F
Row1 2 1 1
Row3 6 6 4
Row4 8 9 4
由于
答案 0 :(得分:1)
我会按如下方式解决问题。
sudo systemct disable sddm
library(data.table)
DT <- fread(f.txt, sep="\t", header=TRUE)
ROWS <- fread(file_rows.txt, sep="\t", header=FALSE)
COLS <- fread(file_cols.txt, sep="\t", header=FALSE)
setkey(DT, id)
setkey(ROWS) # sets key to the single column
## Note that this filters DT to only those rows with `id` in ROWS$V1
DT[ROWS]