unix - 比较两个文件的字段
问题描述
我想比较两个文件:
例如:
文件 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 命令行中更改文件的位置时会发生此错误