【发布时间】:2020-12-23 16:10:15
【问题描述】:
我正在处理一个变体调用格式 (vcf) 文件,我试图向你们展示我正在尝试做的事情:
输入:
1 877803 838425 GC G
1 878077 966631 C CCACGG
输出:
1 877803 838425 C -
1 878077 966631 - CACGG
总之,我正在尝试删除较长字符串的第一个字母。
这是我的代码:
awk 'BEGIN { OFS="\t" } /#/ {next}
{
m = split($4, a, //)
n = split($5, b, //)
x = "-"
delete y
if (m>n){
for (i = n+1; i <= m; i++) {
y = sprintf("%s", a[i])
}
print $1, $2, $3, y, x
}
else if (n>m){
for (j = m+1; i <= n; i++) {
y = sprintf("%s", b[j]) ## Problem here
}
print $1, $2, $3, x, y
}
}' input.vcf > output.vcf
但是,
- 我在第 15 行收到以下错误,甚至在第 9 行也没有
awk: cmd. line:15: (FILENAME=input.vcf FNR=1) fatal: attempt to use array y in a scalar context
- 我不知道如何使用 awk 将数组元素连接成一个字符串。
如果你们能帮助我,我会很高兴的。
圣诞快乐!
【问题讨论】:
-
如果我正确理解您的问题,您就不能使用
$4=substr($4,2)(etc) 吗?祝你好运。
标签: awk vcf-variant-call-format