【发布时间】:2013-01-18 22:36:51
【问题描述】:
我正在尝试修改这样设置的文件:
chr start ref alt
chr1 18884 C CAAAA
chr1 135419 TATACA T
chr1 332045 T TTG
chr1 453838 T TAC
chr1 567652 T TG
chr1 602541 TTTA T
chr1 614937 C CTCTCTG
chr1 654889 C CA
chr1 736800 AC A
我想修改它: 如果列“ref”是一个字符串 >1(即第 2 行),那么我生成 2 个新列,其中:
第一个新列 = 起始坐标-1 第二个新列=起始坐标+(参考字符串的长度)+1
因此,第 2 行的输出如下所示:
chr1 135419 TATACA T 135418 135426
或: 如果 "ref" 中的字符串长度 = 1 且列 "alt"=长度>1 的字符串(即第 1 行)则
第一个新列 = 起始坐标 第二个新列 = 起始坐标+2
所以,第 1 行的输出将是:
chr1 18884 C CAAAA 18884 18886
我在 awk 中尝试过,但没有成功 我的 perl 不存在,但这是最好的方法吗?或者也许在 R 中?
【问题讨论】:
-
如果我正确阅读了规范,你的两个 if 会合二为一(如 1 + 1 = 2),除非你确实有可能缺少 alt 的情况。如果是这样(alt 可能会丢失),那么您可能有一个固定的记录字段输入并且缺少规范 - 因为下面的每个解决方案都会在空白处拆分。
标签: perl awk calculated-columns tsv