如何使用 bash 有选择地删除列和行?

如何使用 bash 有选择地删除列和行?

我目前有一个数据集,如下所示:

输入

Hybridization REF   TCGA-FA-8693-01A-11D-2399-05    TCGA-FA-8693-01A-11D-2399-05    TCGA-FA-8693-01A-11D-2399-05    TCGA-FA-8693-01A-11D-2399-05    TCGA-FA-A4BB-01A-11D-A31Y-05    TCGA-FA-A4BB-01A-11D-A31Y-05    TCGA-FA-A4BB-01A-11D-A31Y-05    TCGA-FA-A4BB-01A-11D-A31Y-05
Composite Element REF   Beta_value  Gene_Symbol Chromosome  Genomic_Coordinate  Beta_value  Gene_Symbol Chromosome  Genomic_Coordinate
cg00000029  0.856505141 RBL2    16  53468112    0.334665026 RBL2    16  53468112
cg00000108  NA  C3orf35 3   37459206    NA  C3orf35 3   37459206
cg00000109  NA  FNDC3B  3   171916037   NA  FNDC3B  3   171916037

数据集要大得多,大小接近 10 GB。例如,太大了,无法在 R 中完成。

然而,许多列实际上是重复的。例如,我只需保留标题为 (第二行)和的每一列之一Gene_Symbol。需要保留各个列,因为它们对于每个样本都是不同的。样品 ID 位于第一行。因此,上述示例所需的输出是:ChromosomeGenomic_CoordinateBeta_value

期望的输出

Hybridization REF   Gene_Symbol Chromosome  Genomic_Coordinate  TCGA-FA-8693-01A-11D-2399-05    TCGA-FA-A4BB-01A-11D-A31Y-05
cg00000029  RBL2    16  53468112    0.856505141 0.334665026
cg00000108  C3orf35 3   37459206    NA  NA
cg00000109  FNDC3B  3   171916037   NA  NA

请注意,我已打乱第一行中的列标题以删除冗余信息。

使用 bash 最有效的方法是什么?

答案1

假设您的标题只是文件顶部的两行,我只需手动修复它们。 (简单的方法:通过管道tail -n +3跳过前两行;然后与具有所需标头的文件连接。)

然后,您可以使用 执行其余操作cut,默认情况下按 [TAB] 字符进行拆分,这非常方便,因为这就是您已经拥有的。只需通过管道传输到

cut -f1,3,6

或其他任何内容(在该示例中,选择第一列、第三列和第六列)。

相关内容