unix - 基于两个公共列合并两个文件,并将空白替换为0
问题描述
我真的需要你的帮助来合并基于 $1$2 的两个文件(有 3 列)并获取 $3 的所有值并将空/空白替换为 0。非常感谢提前
文件1:
chr1 1000001 135
chr2 1000002 57
chr2 4400002 117
chr6 1000003 172
文件2:
chr1 1000001 377
chr1 5500002 320
chr6 1000003 432
期望的输出:
chr1 1000001 135 377
chr1 5500002 0 320
chr2 1000002 57 0
chr2 4400002 117 0
chr6 1000003 172 432
我试过了
awk -F'\t' 'NR==FNR{A[$1$2]=$3; next} {A[$1$2]; B[$1$2]=$3} END{for (id in A) print id,A[id],B[id], "0"}' OFS='\t' File1 File2
输出
chr1 1000001 135
chr1 1000001 377
chr1 5500002 320
chr2 1000002 57
chr2 4400002 117
chr6 1000003 172
chr6 1000003 432
解决方案
您能否尝试仅在 GNU 中使用所示示例进行跟踪、编写和测试awk
。
awk '
FNR==NR{
a[$1 OFS $2]=$NF
next
}
{
if(($1 OFS $2) in a){
d[$1 OFS $2]
$(NF+1)=a[$1 OFS $2]
}
else{
$(NF+1)=0
}
print
}
END{
for(i in a){
if(!(i in d)){
print i,"0",a[i]
}
}
}
' Input_file2 Input_file1 | sort -k1
输出如下。
chr1 1000001 135 377
chr1 5500002 0 320
chr2 1000002 57 0
chr2 4400002 117 0
chr6 1000003 172 432
推荐阅读
- python - 从列表中的数字以外的范围中选择随机数
- python - 数据框即将为空
- pandas - 在字符串列上使用 Pandas.DataFrame.GroupBy 并在 DatetimeIndex 上使用 Pandas.Grouper 时出现意外的时间戳间隔
- amazon-web-services - 我需要哪些 AWS 角色策略才能运行 AWS CLI 命令
- r - 在 R studio 问题中创建 x 变量
- json - 在基于类的 CreateView 中返回 JsonResponse
- assembly - 在引导加载程序 hello world 程序上不断出现笑脸
- python - Python 数据框 - Bloomberg API 批量字段
- python - 将文件从客户端导入到远程服务器 - 错误受限
- php - 使用 Docker 拒绝 Laravel artisan 命令的数据库连接