首页 > 解决方案 > 比较两个文件的字段

问题描述

我想比较两个文件:

例如:

文件 1:

1:10471 A/C/G   rs1309260800
1:10472 G/T rs1238646298
1:10473 A/G rs1408062762
1:10474 A/T rs1326069208
1:10475 A/T rs1404283754
1:10475 G/T rs1321149898
X:59363536  A/T rs868821995
Y:59363566  G/T rs865996778

文件 2:

1:10473 1:10473_G/A
1:13380 1:13380_C/G
1:13380 1:13380_G/C
1:52152 1:52152_ATAAT/A
X:5936355   X:5936355_A/T   

当我尝试

awk 'FNR==NR{seen[$1]=$0; next} ($1 in seen) {$1=seen[$1]}1'  file2 file1

它给了我

1:10471 A/C/G   rs1309260800
1:10472 G/T rs1238646298
1:10473 1:10473_G/A A/G rs1408062762
1:10474 A/T rs1326069208
1:10475 A/T rs1404283754
1:10475 G/T rs1321149898
X:59363536  A/T rs868821995
Y:59363566  G/T rs865996778

但我想从文件 2 中获取所有匹配的行和未匹配的行。所以我改变了文件的位置并尝试了

awk 'FNR==NR{seen[$1]=$0; next} ($1 in seen) {$1=seen[$1]}1'  file1 file2

要得到

1:10473 1:10473_G/A A/G rs1408062762
1:13380 1:13380_C/G
1:13380 1:13380_G/C
1:52152 1:52152_ATAAT/A
X:5936355   X:5936355_A/T   

但我没有得到这个并给我 0 行

任何人都可以向我建议,为什么当我在 awk 命令行中更改文件的位置时会发生此错误

标签: unixterminal

解决方案


推荐阅读