我有这个基因数据库,它被额外的非字母数字值完全搞乱了。这是对错误数据进行的一种加密,我不知道如何清理它。我尝试过sed
,awk
但失败了。这是大量文档的数据示例:
chr2#@!!~/\/=\^%$74711&&*&127472363@Pos1%%0^^+
chr3#@!!~/\/=\^%$74723&&*&127473530@Pos2%%0^^+
chr1#@!!~/\/=\^%$73530&&*&127474697@Pos3%%0^^+
chr2#@!!~/\/=\^%$17469&&*&127475864@Pos4%%0^^+
chr3#@!!~/\/=\^%$12747&&*&127477031@Neg1%%0^^-
chr5#@!!~/\/=\^%$17477&&*&127478198@Neg2%%0^^-
chr7#@!!~/\/=\^%$74781&&*&127479365@Neg3%%0^^-
chr7#@!!~/\/=\^%$74795&&*&127480532@Pos5%%0^^+
chr1#@!!~/\/=\^%$12748&&*&127481699@Neg4%%0^^-
清理后的数据必须是这样的:
chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -
我怎样才能做到这一点?
答案1
你可以用 来做到这一点sed
。事情如下:
sed 's/[^a-zA-Z0-9+-]/ /g' file | column -tc2
chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -
答案2
使用tr
,将所需集合的补码中的字符音译为空格,并压缩重复:
$ tr -sc '[:alnum:][:space:]+-' ' ' < data
chr2 74711 127472363 Pos1 0 +
chr3 74723 127473530 Pos2 0 +
chr1 73530 127474697 Pos3 0 +
chr2 17469 127475864 Pos4 0 +
chr3 12747 127477031 Neg1 0 -
chr5 17477 127478198 Neg2 0 -
chr7 74781 127479365 Neg3 0 -
chr7 74795 127480532 Pos5 0 +
chr1 12748 127481699 Neg4 0 -
答案3
一个awk
解决方案
awk -F '[^[:alnum:]+-]+' '{$1=$1;print}' file