【发布时间】:2019-02-03 06:08:05
【问题描述】:
有人可以帮助我吗?我想在 UNIX 中对列表文件进行编号取决于该文件中的列。但是,某些行的最后一列在它们之间具有相同的字母和长度,但顺序不同,如果其他先前的列也相同,则必须将其视为相同。总之,输入类似于
rs758613821 574290 insertion_inframe P 285 AAAP
rs758613821 574290 insertion_inframe P 285 APAA
rs758613821 574290 insertion_inframe P 285 APLA
rs1367252071 574290 deletion_inframe CADDL 134 F
rs538 3246 frameshift_variant F 97 FGLYP
rs538 3246 frameshift_variant F 97 PYFLG
输出应该是
1 rs758613821 574290 insertion_inframe P 285 AAAP
1 rs758613821 574290 insertion_inframe P 285 APAA
2 rs758613821 574290 insertion_inframe P 285 APLA
3 rs1367252071 574290 deletion_inframe CADDL 134 F
4 rs538 3246 frameshift_variant F 97 FGLYP
4 rs538 3246 frameshift_variant F 97 PYFLG
等等……
通过这种方式,我执行了如下代码
awk 'BEGIN {FS=OFS="\t"} function intern(sym) { if (sym in table)
return table[sym]
return table[sym] = ++counter }
{ print intern($1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6), $0 }' "input" > "output";
尽管如此,我没有解决关于最后一列分配相同数字的问题,如果字母和长度相同,尽管顺序不同。是否可以在 UNIX 环境中执行此操作?我想可能是通过 substr 函数或类似的方法,但我不确定什么是正确的代码。提前感谢您的支持和帮助!
【问题讨论】:
-
非常感谢@gregory 的更正和重新编辑标题