-1

输入文件 1

NM_75 X + 3000623
NM_47 X - 3000333
NM_60 X + 3000132
NM_70 X - 3000258

如何为第 4 个字段中的每个字段获取 -1500 和 +1500 的开始和结束坐标,并使用 awk 制作大小为 100 的 bin?

输出应该是

start coordinate -1500+3000623= 2999123
end coordinate    3000623+1500= 3002123

现在从 2999123-3002123 的范围内,必须为第 4 个字段中的其他坐标创建大小为 100 即 3000/100 的 bin,总共 30 个 bin。

4

1 回答 1

1

我不知道应该如何呈现这些“垃圾箱”,但可以快速解决基本问题:

cat >infile <<XXX
NM_75 X + 3000623
NM_47 X - 3000333
NM_60 X + 3000132
NM_70 X - 3000258
XXX

awk '{print "start coordinate -1500+"$4"="$4-1500;
  for(i=-1400; i<1500; i+=100) print $1,$2,$3,$4+i
  print "end coordinate    "$4"+1500="$4+1500}' infile

输出:

start coordinate -1500+3000623=2999123
NM_75 X + 2999223
NM_75 X + 2999323
...
NM_75 X + 3001923
NM_75 X + 3002023
end coordinate    3000623+1500=3002123
start coordinate -1500+3000333=2998833
NM_47 X - 2998933
NM_47 X - 2999033
...
NM_47 X - 3001633
NM_47 X - 3001733
end coordinate    3000333+1500=3001833
start coordinate -1500+3000132=2998632
NM_60 X + 2998732
NM_60 X + 2998832
...
NM_60 X + 3001432
NM_60 X + 3001532
end coordinate    3000132+1500=3001632
start coordinate -1500+3000258=2998758
NM_70 X - 2998858
NM_70 X - 2998958
...
NM_70 X - 3001558
NM_70 X - 3001658
end coordinate    3000258+1500=3001758

在纯中相同:

while read x y z n; do
  printf "start coordinate -1500+%7d=%7d\n" $n $((n-1500))
  for((i=-1400;i<1500;i+=100));{ printf "%s %s %s %d\n" $x $y $z $((n+i));}
  printf "end coordinate    %7d+1500=%7d\n" $n $((n+1500))
done <infile

对于大文件要快得多。

问:

  • 第三场是第四场的标志吗?
  • “垃圾箱”应该如何呈现?
于 2013-06-25T11:06:40.597 回答