使用awk提取具有多个名称的列数据(UNIX)

问题描述 投票:0回答:0

嘿,我刚开始使用 Linux,我有一个包含 5k 列的大型数据集,所有列的名称都不同,用于比较患者数据。我想从其他组(例如 BC、PR...等)中提取“PC”数据的子集。 PC大约有100名成员,全部被贴上PC****的标签。其中 **** 是案例编号。

数据看起来像这样(尽管分隔符 = ):

ID_REF BC0010 BC0011 PC0023 PC0013 PR0007 PR0053
基因1 1.177703095 -1.32116828 -2.176250582 -2.079342976 -1.427146954 10.64102737
基因2 1.177703095 -1.32116828 -2.176250582 -2.079342976 -1.427146954 10.64102737
基因3 1.177703095 -1.32116828 -2.176250582 -2.079342976 -1.427146954 10.64102737

我想要得到的是(再次使用分隔符=):

ID_REF PC0023 PC0013
基因1 -2.176250582 -2.079342976
基因2 -2.176250582 -2.079342976
基因3 -2.176250582 -2.079342976

到目前为止我已经尝试过:

 $ awk -F/t -v col=*PC 'NR==1{for(i=1;i<=NF;i++){if($i==col){c=i;break}} print $c} NR>1{print $c}' data.txt > pcData.txt

但是由于某种原因,这不会对数据进行子集化,我最终会返回所有列。

我不知道要在 col= 中放入什么???使这项工作成功。

感谢您的帮助!

unix awk subset multiple-columns large-data
© www.soinside.com 2019 - 2024. All rights reserved.