Bash,使用sort和join连接两个不同长度的表
我意识到这是重复,但在其他帖子中的解决方案对我不起作用,抱歉 我有两张桌子,testcut.pileup:Bash,使用sort和join连接两个不同长度的表,bash,awk,Bash,Awk,我意识到这是重复,但在其他帖子中的解决方案对我不起作用,抱歉 我有两张桌子,testcut.pileup: chrM 1370 T 1 chrM 1371 T 1 chrM 1372 C 1 chrM 1373 T 1 chrM 1374 A 1 和testcut2.pileup: chrM 720 T 1 chrM 721 T
chrM 1370 T 1
chrM 1371 T 1
chrM 1372 C 1
chrM 1373 T 1
chrM 1374 A 1
和testcut2.pileup:
chrM 720 T 1
chrM 721 T 1
chrM 722 C 1
chrM 723 A 0
chrM 724 C 1
chrM 1370 T 2
chrM 1371 T 3
chrM 1372 C 4
chrM 1373 T 3
chrM 1374 A 2
我想加入这些数据集,以便这些数据集彼此并排显示。在一个理想的世界里,这些将由第二列中的数字(如下所示)来组织,但我很乐意让它们彼此并排
预期结果:
chrM 720 T 1
chrM 721 T 1
chrM 722 C 1
chrM 723 A 0
chrM 724 C 1
chrM 1370 T 1 chrM 1370 T 2
chrM 1371 T 1 chrM 1371 T 3
chrM 1372 C 1 chrM 1372 C 4
chrM 1373 T 1 chrM 1373 T 3
chrM 1374 A 1 chrM 1374 A 2
到目前为止,我正在尝试:
join -j 2 <(sort -k 2 testcut.pileup) <(sort -k 2 testcut2.pileup) > join.pileup
如果我直接运行join
,则第二列中的数字将移位:
chrM 1370 T 1 720 T 1
chrM 1370 T 1 721 T 1
chrM 1370 T 1 722 C 1
chrM 1370 T 1 723 A 0
chrM 1370 T 1 724 C 1
谢谢你的帮助。
awk
救命
您可以使它更通用,但我硬编码了4个字段
$ awk 'NR==FNR {a[$2]=$0; next}
{print $2 in a?a[$2] "\t" $0:"\t\t\t\t"$0}' file{1,2} |
column -ts'\t'
chrM 720 T 1
chrM 721 T 1
chrM 722 C 1
chrM 723 A 0
chrM 724 C 1
chrM 1370 T 1 chrM 1370 T 2
chrM 1371 T 1 chrM 1371 T 3
chrM 1372 C 1 chrM 1372 C 4
chrM 1373 T 1 chrM 1373 T 3
chrM 1374 A 1 chrM 1374 A 2
awk
救援
您可以使它更通用,但我硬编码了4个字段
$ awk 'NR==FNR {a[$2]=$0; next}
{print $2 in a?a[$2] "\t" $0:"\t\t\t\t"$0}' file{1,2} |
column -ts'\t'
chrM 720 T 1
chrM 721 T 1
chrM 722 C 1
chrM 723 A 0
chrM 724 C 1
chrM 1370 T 1 chrM 1370 T 2
chrM 1371 T 1 chrM 1371 T 3
chrM 1372 C 1 chrM 1372 C 4
chrM 1373 T 1 chrM 1373 T 3
chrM 1374 A 1 chrM 1374 A 2
使用join、sort和bash:
join -j 2 <(sort -t $'\t' -k 2 testcut.pileup) <(sort -t $'\t' -k 2 testcut2.pileup) -a 2 -t $'\t' -o1.1,1.2,1.3,1.4,2.1,2.2,2.3,2.4 | sort -t $'\t' -k6n
使用join、sort和bash:
join -j 2 <(sort -t $'\t' -k 2 testcut.pileup) <(sort -t $'\t' -k 2 testcut2.pileup) -a 2 -t $'\t' -o1.1,1.2,1.3,1.4,2.1,2.2,2.3,2.4 | sort -t $'\t' -k6n
Bash并不是这项工作的最佳工具。相反,我建议您使用Python进行快速旋转。Bash并不是这项工作的最佳工具。我建议改为使用Python进行快速旋转。如果我想在大约90个文件中应用此命令以生成一个表,您是否可以建议我需要更改哪些内容?此脚本不会扩展到90个文件,但对于2个以上的文件,
join
不是合适的工具。也许可以问另一个问题。如果我想在大约90个文件中应用此命令以生成一个表,您是否可以建议我需要更改哪些内容?此脚本不会扩展到90个文件,但对于2个以上的文件,join
不是合适的工具。也许可以问另一个问题。