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>]
例如INTS11:P446P
对应于gene:key
问题是我在每一行上循环创建一个包含genes
作为值的数组,因此可以为同一个gene
找到多个重复的条目。
我的尝试是
&
上分割并存储在a
a
中的每个元素,在:
上分割并将a[i]
添加到数组b
问题是我不知道如何从数组中获取唯一值。我找到了这个question,但它谈论的是文件而不是像我这样的数组。
代码:
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
将输出:
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=
个):
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
编辑:
我的问题得到了部分解决,这要归功于Pierre Francois的回答SUBSEP
。我的另一个问题是,我只想从数组genes
和keys
中获取唯一元素。
谢谢。
答案 0 :(得分:1)
假设您要删除与 awk 的 join 函数串联的字段之间的空格,这是您必须为 join 提供的第四个参数。 em>函数是幻数SUBSEP
,而不是您惯用的空字符串""
。试试:
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