Awk从数组中获取唯一元素
file.txt: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
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