我的文件A格式如下,有数十万列和数千行:
1000->100001 DOSE 2.000 2.000 2.000 2.000 2.000 ....
1001->100101 DOSE 1.988 1.988 2.000 2.000 2.000 ....
1001->100101 DOSE 1.933 2.000 2.000 2.000 2.000 ....
1002->100201 DOSE 2.000 2.000 2.000 2.000 2.000 ....
1002->100201 DOSE 2.000 2.000 2.000 2.000 2.000 ....
我的文件B(数千个条目)的格式如下:
SNP,Al1,Al2,Freq1,MAF,AvgCall,Rsq,Genotyped,key,pos,gene_key
20:29649365,C,T,0.93021,0.06979,0.93021,0.10115,,803428,29649365,12
20:29649737,A,G,0.93914,0.06086,0.93914,0.14303,,803442,29649737,12
20:29649765,T,G,0.99963,0.00037,0.99963,0.13918,,803443,29649765,12
20:29650462,A,T,0.89387,0.10613,0.89388,0.12864,,803456,29650462,12
我想做的是从文件A中提取前两列和文件B中“键”列指定的列。我花了一些时间尝试使用awk来完成这个任务,但理论上不应该太难的事情却让我花费了太长时间。
我的具体问题是:一旦从文件B中提取了“键”条目,如何将这些值导入awk命令以提取文件A的内容?
文件B前三列的手动命令:
awk '{print $1, $2, $803428, $803442, $803442}' fileA > output.txt
编辑:
文件A和文件B之间没有共同的列。在文件A中,第803428列的值将代表来自文件B的SNP“20:29649365”的结果。
如果要运行的命令是:
awk '{print $1, $2, $3, $4, $5}' fileA
结果将是:
1000->100001 DOSE 2.000 2.000 2.000 2.000 2.000
1001->100101 DOSE 1.988 1.988 2.000 2.000 2.000
1002->100201 DOSE 1.933 1.999 2.000 2.000 2.000
1003->100301 DOSE 2.000 2.000 2.000 2.000 2.000
1004->100401 DOSE 2.000 2.000 2.000 2.000 2.000
我将使用具体示例来测试给出的awk命令解决方案。
fileA:
1000->100001 DOSE 2.000 2.000 2.000 2.000 2.000
1001->100101 DOSE 1.988 1.988 2.000 2.000 2.000
1001->100101 DOSE 1.933 2.000 1.500 2.000 2.000
1002->100201 DOSE 2.000 2.000 2.000 2.000 1.622
1002->100201 DOSE 2.000 2.000 2.000 2.000 2.000
文件B:
SNP,Al1,Al2,Freq1,MAF,AvgCall,Rsq,Genotyped,key,pos,gene_key
20:29649365,C,T,0.93021,0.06979,0.93021,0.10115,,3,29649365,12
20:29649737,A,G,0.93914,0.06086,0.93914,0.14303,,4,29649737,12
20:29650462,A,T,0.89387,0.10613,0.89388,0.12864,,6,29650462,12
期望输出结果(第1、2、3、4、6列 - 最后3列来自文件B的关键列):
1000->100001 DOSE 2.000 2.000 2.000
1001->100101 DOSE 1.988 1.988 2.000
1001->100101 DOSE 1.933 2.000 2.000
1002->100201 DOSE 2.000 2.000 2.000
1002->100201 DOSE 2.000 2.000 2.000
$803428、$803442、$803442
,而$803456
被忽略了呢?另外,文件 B 中的pos
列实际上是29649365、29649737...
,你是指key
列吧? - Kent