擅长:python、mysql、java
<p>只需在当前行的第一个字段与上一行相同的情况下建立所有行的连接记录,然后在第一个字段的值发生更改时打印它:</p>
<pre><code>$ awk '
$1==prev { rec = rec " | " $2 " " $3 }
$1!=prev { if (NR>1) print rec; rec=$0 }
{ prev=$1 }
END { print rec }
' file
TRINITY_GG_428_c0_g1_i1_orf1 PF13499.1 EF_hand_5 | PF00036.27 efhand | PF13405.1 EF_hand_4 | PF13833.1 EF_hand_6 | PF13202.1 EF_hand_3
TRINITY_GG_429_c0_g1_i1_orf1 PF00156.22 Pribosyltran
TRINITY_GG_431_c5_g1_i1_orf1 PF00475.13 IGPD
TRINITY_GG_461_c0_g1_i1_orf1 PF01208.12 URO-D | PF12876.2 Cellulase-like
</code></pre>
<p>或者,如果您的输入行键不是连续的,并且您不关心输出顺序与输入顺序相同,并且您的输入文件足够小,可以将其全部保存在内存中,那么您可以使用哈希方法,建议使用不同的答案:</p>
^{pr2}$