Bash 在unixshell中使用第一列作为引用将行转换为列
我正在尝试转换此数据:Bash 在unixshell中使用第一列作为引用将行转换为列,bash,unix,awk,Bash,Unix,Awk,我正在尝试转换此数据: EU842263.1.1492 AA.A_1 BB.B_2 CC.C_3 LN612956.1.1401 AA.A_1 BB.B_2 CC.C_3 DD.D_4 EE.E_5 FF.F_6 GU304497.1.1513 AA.A_1 AB905872.1.1334 AA.A_1 BB.B_2 CC.C_3 DD.D_4 为此: EU842263.1.1492 AA.A_1 EU842263.1.1492 BB.B_2 EU842263.1.1492 CC.C_3 LN
EU842263.1.1492 AA.A_1 BB.B_2 CC.C_3
LN612956.1.1401 AA.A_1 BB.B_2 CC.C_3 DD.D_4 EE.E_5 FF.F_6
GU304497.1.1513 AA.A_1
AB905872.1.1334 AA.A_1 BB.B_2 CC.C_3 DD.D_4
为此:
EU842263.1.1492 AA.A_1
EU842263.1.1492 BB.B_2
EU842263.1.1492 CC.C_3
LN612956.1.1401 AA.A_1
LN612956.1.1401 BB.B_2
LN612956.1.1401 CC.C_3
LN612956.1.1401 DD.D_4
LN612956.1.1401 EE.E_5
LN612956.1.1401 FF.F_6
GU304497.1.1513 AA.A_1
AB905872.1.1334 AA.A_1
AB905872.1.1334 BB.B_2
AB905872.1.1334 CC.C_3
AB905872.1.1334 DD.D_4
我怎样才能做到这一点
请注意,数据(AA.A_1)仅表示我的真实数据(例如,0.15.01610.011_528399)。您可以在
Awk
中执行此操作,将第一列中的值作为键,将行其余部分的值作为散列值
awk '
{
for(i=2;i<=NF;i++)
unique[$1]=(unique[$1]FS$i); next
} END {
for (i in unique) {
n=split(unique[i],temp);
for(j=1;j<=n;j++)
print i,temp[j]
}
}' file
awk'
{
对于(i=2;i