【发布时间】:2016-09-01 07:45:50
【问题描述】:
我有两个文件用于与制表符分隔文件组合。 这两个文件键可能仅对于“读取”数不同。
我想比较这两个文件并根据子字符串键和匹配进行组合。
例如,
File1 Key : "Cluster0_Reads255"
File2 Key : "Cluster0_Reads50"
This case is same because "Cluster0_Reads" is identical.
这种情况下,我想将这两列与 File1 键名结合起来。 请查看以下示例。
文件 1。
A B
Cluster0_Reads255 500
Cluster1_Reads253 300
Cluster2_Reads100 200
Cluster3_Reads100 350
文件 2。
A C
Cluster0_Reads50 GE
Cluster1_Reads200 GA
Cluster2_Reads100 GA
结果。
A B C
Cluster0_Reads255 500 GE
Cluster1_Reads253 300 GA
Cluster2_Reads100 200 GA
Cluster3_Reads100 350 -
我做了一个 awk 与完全匹配查找和组合,如下所示,
awk '
BEGIN { FS = OFS = "\t" }
{key = $1}
FNR == NR {result[key] = $0; next;}
(key in result) { updated[key]=1 ; for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
END {
PROCINFO["sorted_in"] = "@ind_str_asc" # if using GNU awk
for (key in result) {
if(!(key in updated)) result[key] = result[key] FS "-"
if(!(length(key)==0)) print result[key]
}
}
' File1 File2 > File3
有没有什么办法可以在子串之后进行组合?
谢谢。
【问题讨论】:
-
您的示例输入似乎在第一列(集群 0、1、2、3)中排序。如果这是真的,您可以执行类似
paste t1 <(awk '{print $2}' t2) | perl -pe 's/^(\S+[ \t]+){2}$/$&-/'的操作