unix - awk 比较两个文件中的列,估算另一列的值

标签 unix awk

我想比较两个文件的第二列。如果匹配,则将第二个文件中第三列的对应值打印到第一个文件中。如果没有找到匹配项,填写“NA”

File 1

1      rs1    AA    10
1      rs2    DD    20
1      rs3    EE    30
1      rs4    RR    40


File 2

1      rs1    Pascal
1      rs4    Albinoni


Desired output

1      rs1    AA    10    Pascal
1      rs2    DD    20    NA
1      rs3    EE    30    NA
1      rs4    RR    40    Albinoni

我用过这段代码,但它只输出匹配项:

awk 'NR==FNR { a[$1]=$2; next} $1 in a {print $0, a[$1]}' File2 File1

谢谢

最佳答案

awk 'FNR==NR{a[$2]=$3;next}{print $0,a[$2]?a[$2]:"NA"}' file2 file1

测试如下:

> cat temp1
1      rs1    AA    10
1      rs2    DD    20
1      rs3    EE    30
1      rs4    RR    40
> cat temp2
1      rs1    Pascal
1      rs4    Albinoni
> awk 'FNR==NR{a[$2]=$3;next}{print $0,a[$2]?a[$2]:"NA"}' temp2 temp1
1      rs1    AA    10 Pascal
1      rs2    DD    20 NA
1      rs3    EE    30 NA
1      rs4    RR    40 Albinoni
> 

关于unix - awk 比较两个文件中的列,估算另一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18592736/

相关文章:

bash:模式 x 和 y 之间的单独行 block

awk - 当特定列中的值更改时打印行

bash - 搜索一个字符串,并检索它后面的所有行,直到另一个特定模式

linux - 如何用字符串和随机生成的数字替换文件中的 header 值?

unix - find与grep有什么区别?

bash - 在 shell 脚本中定义一个 Increment 变量,该变量在每个 cronjob 上递增

shell - 如何使用 awk/shell 脚本执行 SQLWhere 子句和 SQL 连接(如行和列的过滤和合并)?

c - 尝试编译目标。这是C代码。已放置#ifdef MYDEBUG。如何在编译期间将其作为设置传递?

linux - 当有人 cd 到特定目录时如何执行某些命令

bash - 使用 AWK 使用来自多个输入文件的字符串作为 CSV 文件中选择列的搜索条件