unix - 我们是否有一个 awk / bash 脚本来逐行比较一个文件的元素与另一个具有多个分隔符的文件?
问题描述
我有一个制表符分隔的文件(比如 file1 有 4 列),其中包含以下方式的条目。
chr1 12145 12310 ref|DDX11L1,ref|NR_046018,ens|ENST00000518655,ens|ENST00000450305,ens|ENST00000456328,ens|ENST00000515242
我有另一个文件(比如 file2),其中包含恰好是 file1 第 4 列的子部分的元素
例如。DDX11L1
有没有办法比较 file2 和 file1 的条目,如果有部分匹配,就像上面提到的情况一样,产生类似于这个的输出 -
chr1 12145 12310 DDX11L1
解决方案
这将稍微调整空格,但也许:
$ cat file1
chr1 12145 12310 ref|DDX11L1,ref|NR_046018,ens|ENST00000518655,ens|ENST00000450305,ens|ENST00000456328,ens|ENST00000515242
chr2 12345 12310 ref|DDX12L1,ref|NR_046018,ens|ENST00000518655,ens|ENST00000450305,ens|ENST00000456328,ens|ENST00000515242
$ cat file2
DDX11L1
$ awk 'NR==FNR{split($4, a, "|"); $4="";
for( i in a) b[a[i]] = $0; next}
{ for( i in b ) if( match(i, $0)) {
print b[i], $0; next}
}' file1 file2
chr1 12145 12310 DDX11L1
请注意,这会显式拆分第 4 列|
,因此不会部分匹配类似 的字符串1L1,ref|NR_
,但我怀疑这是所需的行为。
推荐阅读
- javascript - Angular Service 提供默认值?
- javascript - 在隐藏的 div 中发布变量
- javascript - 如果数据库中的数据返回更多无效
- elasticsearch - 在 Kibana 中,度量标准无法正确显示仪表类型
- php - 在 HTML2PDF 中自动创建新页面
- android - 触摸外部时弹出窗口不隐藏
- python - 长列表作为 set_xticklabels 输入的问题(未对齐)
- google-chrome - 在 DevTools 的性能选项卡中分析鼠标单击
- r - 在 mutate 或其他 dplyr 函数中使用两个数据帧及其列
- class - 是否可以使用 Kotlin 中的另一个接口来满足接口成员实现?