Awk从数组中获取唯一元素

Awk从数组中获取唯一元素,awk,Awk,file.txt: INTS11:P446P&INTS11:P449P&INTS11:P518P&INTS11:P547P&INTS11:P553P PLCH2:A1007int&PLCH1:D987int&PLCH2:P977L 我试图通过转换文件内容来创建超链接。超链接将具有以下样式: somelink&gene=<gene>[&gene=<gene>]&mutation=<gene:ke

file.txt:

INTS11:P446P&INTS11:P449P&INTS11:P518P&INTS11:P547P&INTS11:P553P
PLCH2:A1007int&PLCH1:D987int&PLCH2:P977L
我试图通过转换文件内容来创建超链接。超链接将具有以下样式:

somelink&gene=<gene>[&gene=<gene>]&mutation=<gene:key>[&mutation=<gene:key>]
将输出:

somelink&gene=INTS11&gene=INTS11&gene=INTS11&gene=INTS11&gene=INTS11&mutation=INTS11:P446P&mutation=INTS11:P449P&mutation=INTS11:P518P&mutation=INTS11:P547P&mutation=INTS11:P553P
somelink&gene=PLCH2&gene=PLCH1&gene=PLCH2&mutation=PLCH2:A1007int&mutation=PLCH1:D987int &mutation=PLCH2:P977L
我希望得到类似的东西(注意有多少个
&gene=
):

编辑:

由于皮埃尔·弗朗索瓦(Pierre Francois)的回答,我的问题得到了部分解决,这是
子集。我的另一个问题是,我只想从数组
基因
中获取唯一的元素


谢谢。

如果要删除与awk的连接函数连接的字段之间的空格,则必须向连接函数提供的第四个参数是幻数
子集
,而不是空字符串
”。尝试:

awk '@include "join"
    {
    split($0,a,"&")
    for ( i = 1; i <= length(a); i++ ) {
        split(a[i], b, ":");
        genes[i] = "&gene="b[1];
        keys[i] = "&mutation="b[1]":"b[2]
    }
    print "somelink"join(genes, 1, length(genes),SUBSEP)join(keys, 1, length(keys),SUBSEP)
    delete genes
    delete keys
}' file.txt
awk'@包括“加入”
{
拆分($0,a,“&”)

对于(i=1;我想如果我能理解你真正想要什么,这并不难解决,但是你的解释没有解释输入中的字段是什么,或者它们应该如何映射到输出字段。你能再尝试一下你的目标是什么吗?问题是什么?你的意思是什么问题标题中的“打印加入添加空间以获得结果”?感谢您的回答,并对延迟答复表示抱歉。这部分回答了我的问题。我将编辑我的OP以了解更多信息
somelink&gene=INTS11&mutation=INTS11:P446P&INTS11:P449P&INTS11:P518P&INTS11:P547P&INTS11:P553P
somelink&gene=PLCH2&gene=PLCH1&mutation=PLCH2:A1007int&mutation=PLCH1:D987int&mutation=PLCH2:P977L
awk '@include "join"
    {
    split($0,a,"&")
    for ( i = 1; i <= length(a); i++ ) {
        split(a[i], b, ":");
        genes[i] = "&gene="b[1];
        keys[i] = "&mutation="b[1]":"b[2]
    }
    print "somelink"join(genes, 1, length(genes),SUBSEP)join(keys, 1, length(keys),SUBSEP)
    delete genes
    delete keys
}' file.txt