bash - 将一个文件中的两列与另一个文件中的两列相匹配,并从第一个文件中返回另一列
问题描述
我需要将文件 1 中的第 2 列和第 5 列与第二个文件中的第 2 列和第 4 列进行匹配。如果匹配,则在文件 2 中返回一个新列,其中包含来自文件 1 的第 4 列的值。
文件_1
10 43572716 43572935 22 AMP
10 43572716 43572935 26 DEL
18 48578898 48579056 71 DEL
文件_2
10 43572716 43572935 DEL 1 RET -0,5 0,51 218,164 0,58 255,89 0,73 0,79 0,85
18 48578898 48579056 DEL 1 SMAD4 -0,9 0,23 8,70886 0,02 16,665 0,05 0,4 0,52
File_2 包含更多列
我已经尝试了下面的代码,但它返回了整个文件
awk 'FNR==NR{a[$2 FS $5]=$0;next} (($2 FS $4) in a) {print a[$2 FS $4],$0}' file_1.bed FILE_2.bed
预期结果是
10 43572716 43572935 DEL 1 RET -0,5 0,51 218,164 0,58 255,89 0,73 0,79 0,85 26
18 48578898 48579056 DEL 1 SMAD4 -0,9 0,23 8,70886 0,02 16,665 0,05 0,4 0,52 71
有人可以帮忙吗?
解决方案
你很接近,你能试试跟随吗?
awk 'FNR==NR{a[$2,$5]=$4;next} ($2,$4) in a{print $0,a[$2,$4]}' Input_file1 Input_file2
添加非单线形式的解决方案,如下所示:
awk '
FNR==NR{
a[$2,$5]=$4
next
}
($2,$4) in a{
print $0,a[$2,$4]
}
' Input_file1 Input_file2
为什么 OP 的代码不起作用: OP 在完成此操作的逻辑方面很接近,唯一的问题是在读取 Input_file1 尽管a[$2 FS $5]=$0
它应该是a[$2 FS $5]=$4
并且在第二个 Input_fie 上打印它时读取它应该是print $0,a[$2 FS $4]
。我在上面的代码中修复了它。
推荐阅读
- java - TestNG 没有并行运行 10 个线程
- c - sizeof 在某些情况下的行为是否不同
- python - 如何根据另一列的特定值从一列中删除 NaN
- node.js - Google Chrome Labs ndb - 安装但不运行
- java - 如何在运行时自动打印Java函数的所有参数值
- android-studio - Android Studio 4.1.2 - Dart 和 Flutter 未安装在“flutter doctor”中
- javascript - 在没有 apex only javascript 控制器的闪电网络组件上创建任务?
- html - CSS:如何从下拉菜单中舍入选择框?
- java - 我的 android studio 制作的 apk 无法正常工作
- r - 从 GitHub 下载 bibtex 到 R