我目前有一个数据集,如下所示:
输入
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 位于第一行。因此,上述示例所需的输出是:Chromosome
Genomic_Coordinate
Beta_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
或其他任何内容(在该示例中,选择第一列、第三列和第六列)。