使用awk

时间:2015-05-18 16:18:16

标签: bash awk

我有几个非常大(几千兆字节)制表符分隔文件,其中包含命名行(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

由于

1 个答案:

答案 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]