使用AWK将相似的连续行追加到一个较长的行中
我有一个7列的大文本文件,其中的行排序如下:使用AWK将相似的连续行追加到一个较长的行中,awk,Awk,我有一个7列的大文本文件,其中的行排序如下: gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u gi|352964122|gb|JH286168.1| 00884 C C 26 0.76 p gi|352964122|gb|JH286168.1| 00884 C C 33 0.89 f gi|352964122|gb|JH286168.1| 00885 G G 14 1.00
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u
gi|352964122|gb|JH286168.1| 00884 C C 26 0.76 p
gi|352964122|gb|JH286168.1| 00884 C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u
gi|352964122|gb|JH286168.1| 00885 A A 30 0.84 f
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u - - - ------------ G G 33 0.89 f
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - ---- - - - ------ - - -- ----- - -
我需要做的是,如果前两列在连续行中相同,则将其余列追加到第一行。可以有1行、2行或3行“相似”,如果少于3行,我需要占位符来保持列的完整性。因此,上述情况如下所示:
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u
gi|352964122|gb|JH286168.1| 00884 C C 26 0.76 p
gi|352964122|gb|JH286168.1| 00884 C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u
gi|352964122|gb|JH286168.1| 00885 A A 30 0.84 f
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u - - - ------------ G G 33 0.89 f
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - ---- - - - ------ - - -- ----- - -
我用AWK尝试了很多方法,但都不太明白。如何做到这一点?这应该做到:
(编辑:我没有注意到您需要占位符。我会调查一下……)
这应该做到:
(编辑:我没有注意到您需要占位符。我会调查一下……)
这应该做到:
(编辑:我没有注意到您需要占位符。我会调查一下……)
这应该做到:
(编辑:我没有注意到您需要占位符。我会调查一下……)
我不确定你是如何获得第二排成绩的,但这至少符合我对目标的理解:
awk '
{
head=$1 " " $2
tail=$3 " " $4 " " $5 " " $6 " "$7
if(previous!=head) {
if(previous!="") printf("%s %s %s %s\n",previous,p[1],p[2],p[3])
previous=head
i=1
p[i]=tail
p[2]=p[3]="- - - -"
} else {
i=i+1
p[i]=tail
}
}
END { printf("%s %s %s %s\n",previous,p[1],p[2],p[3]) }'
输出:
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u A A 30 0.84 f - - - -
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - - - - - -
我不确定你是如何获得第二排成绩的,但这至少符合我对目标的理解:
awk '
{
head=$1 " " $2
tail=$3 " " $4 " " $5 " " $6 " "$7
if(previous!=head) {
if(previous!="") printf("%s %s %s %s\n",previous,p[1],p[2],p[3])
previous=head
i=1
p[i]=tail
p[2]=p[3]="- - - -"
} else {
i=i+1
p[i]=tail
}
}
END { printf("%s %s %s %s\n",previous,p[1],p[2],p[3]) }'
输出:
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u A A 30 0.84 f - - - -
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - - - - - -
我不确定你是如何获得第二排成绩的,但这至少符合我对目标的理解:
awk '
{
head=$1 " " $2
tail=$3 " " $4 " " $5 " " $6 " "$7
if(previous!=head) {
if(previous!="") printf("%s %s %s %s\n",previous,p[1],p[2],p[3])
previous=head
i=1
p[i]=tail
p[2]=p[3]="- - - -"
} else {
i=i+1
p[i]=tail
}
}
END { printf("%s %s %s %s\n",previous,p[1],p[2],p[3]) }'
输出:
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u A A 30 0.84 f - - - -
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - - - - - -
我不确定你是如何获得第二排成绩的,但这至少符合我对目标的理解:
awk '
{
head=$1 " " $2
tail=$3 " " $4 " " $5 " " $6 " "$7
if(previous!=head) {
if(previous!="") printf("%s %s %s %s\n",previous,p[1],p[2],p[3])
previous=head
i=1
p[i]=tail
p[2]=p[3]="- - - -"
} else {
i=i+1
p[i]=tail
}
}
END { printf("%s %s %s %s\n",previous,p[1],p[2],p[3]) }'
输出:
gi|352964122|gb|JH286168.1| 00884 C C 14 1.00 u C C 26 0.76 p C C 33 0.89 f
gi|352964122|gb|JH286168.1| 00885 G G 14 1.00 u A A 30 0.84 f - - - -
gi|352964122|gb|JH286168.1| 00886 T T 31 0.81 f - - - - - - - -
$cat tst.awk
开始{maxRecs=3}
功能prta(i,dflt){
dflt=a[1]
gsub(/[^[:space:]+/,“-”,dflt)
printf“%s”,键
对于(i=1;i$cat tst.awk
开始{maxRecs=3}
功能prta(i,dflt){
dflt=a[1]
gsub(/[^[:space:]+/,“-”,dflt)
printf“%s”,键
对于(i=1;i$cat tst.awk
开始{maxRecs=3}
功能prta(i,dflt){
dflt=a[1]
gsub(/[^[:space:]+/,“-”,dflt)
printf“%s”,键
对于(i=1;i$cat tst.awk
开始{maxRecs=3}
功能prta(i,dflt){
dflt=a[1]
gsub(/[^[:space:]+/,“-”,dflt)
printf“%s”,键
对于(i=1;i)列出一些您尝试过的代码,并解释其不起作用的原因。目前尚不清楚字段的显示顺序是如何确定的,也不清楚“占位符”的规则.你能解释一下吗?我不明白你是如何放置占位符的。在输出的第二行中,g330.89f
是从哪里来的。“a30”是从哪里来的go?发布一些您尝试过的代码,并解释为什么它不起作用。目前还不清楚字段的显示顺序是如何确定的,也不清楚“占位符”的规则.你能解释一下吗?我不明白你是如何放置占位符的。在输出的第二行中,g330.89f
是从哪里来的。“a30”是从哪里来的go?发布一些您尝试过的代码,并解释为什么它不起作用。目前还不清楚字段的显示顺序是如何确定的,也不清楚“占位符”的规则.你能解释一下吗?我不明白你是如何放置占位符的。在输出的第二行中,g330.89f
是从哪里来的。“a30”是从哪里来的go?发布一些您尝试过的代码,并解释为什么它不起作用。目前还不清楚字段的显示顺序是如何确定的,也不清楚“占位符”的规则.你能解释一下吗?我不明白你是如何放置占位符的。在输出的第二行中,g330.89f
是从哪里来的。“a30”是从哪里来的开始?我感谢你的帮助!我很抱歉花了这么长时间才解决我的问题,但是这个经过一点调整的解决方案对我来说非常有效。谢谢你的反馈,迟做总比不做好!我感谢你的帮助!我很抱歉花了这么长时间才解决我的问题,但是这个经过一点调整的解决方案对我来说非常有效。谢谢你的建议反馈,迟做总比不做强!我感谢你的帮助!很抱歉我花了这么长时间才解决我的问题,但这个稍加调整的解决方案对我来说非常有效。感谢你的反馈,迟做总比不做强!我感谢你的帮助!很抱歉我花了这么长时间才解决我的问题,但这个稍加调整的解决方案奏效了太好了。谢谢你的反馈,迟做总比不做好!