Regex 删除符号并创建以制表符分隔的文件,同时将特定字符串后面的所有单词保留在一列中

Regex 删除符号并创建以制表符分隔的文件,同时将特定字符串后面的所有单词保留在一列中,regex,sed,Regex,Sed,我有一个满是这样几行的文件: >Mouse|chr9:95713136-95716028 | element 1367 | positive | hindbrain (rhombencephalon)[5/8] | midbrain (mesencephalon)[3/8] | other[7/8] >Mouse|chr16:90449561-90451327 | element 1672 | positive | forebrain[4/8] | heart[6/8] >

我有一个满是这样几行的文件:

>Mouse|chr9:95713136-95716028 | element 1367 | positive  | hindbrain (rhombencephalon)[5/8] | midbrain (mesencephalon)[3/8] | other[7/8]
>Mouse|chr16:90449561-90451327 | element 1672 | positive  | forebrain[4/8] | heart[6/8]
>Mouse|chr3:137446183-137449401 | element 4 | positive  | heart[3/4]
我想要得到的是这样的东西:

 Mouse  chr9    95713136    95716028    element 1367    positive    hindbrain (rhombencephalon)[5/8]|midbrain (mesencephalon)[3/8]|other[7/8]
这样,“肯定”之后的所有单词都在一列中,由管道分隔,所有列由制表符分隔。 这就是我所做的:

sed -E 's/ *[>\|:-] */\t/g' mouse_genome_vista1.txt  > mouse_genome_vista2.txt
sed "s/^[ \t]*//" -i mouse_genome_vista2.txt
我的输出是这样的:

Mouse   chr9    95713136    95716028    element 1367    positive    hindbrain (rhombencephalon)[5/8]    midbrain (mesencephalon)[3/8]   other[7/8]
Mouse   chr16   90449561    90451327    element 1672    positive    forebrain[4/8]  heart[6/8]
Mouse   chr3    137446183   137449401   element 4   positive    heart[3/4]

如果我在“肯定”之后只有一个词,它就会在它的专栏中单独出现。但是,如果我有多个列,我将有多个列。例如,后脑、中脑和其他都在各自的制表符分隔的列中。我希望它们在一列中以管道分隔。

您可以使用perl或awk尝试这一点:

[|:-](?=.*positive)|positive\s+\K\|

(注意,它显示了一组字符串,而不是文件):


您可以使用perl或awk来尝试:

[|:-](?=.*positive)|positive\s+\K\|

(注意,它显示了一组字符串,而不是文件):


chr12
来自哪里?我想得到的是这样的东西:抱歉,我修正了它,我一定是因为我的数据太大而搞混了。第四列总是肯定的吗?你真的需要使用sed吗?sed不支持向前看或向后看,但对于单行程序解决方案,我认为您需要具有正向向前看功能的东西,例如awk或perlwhere
chr12
来自哪里?我想得到的是这样的东西:抱歉,我修正了它,我一定是因为我的数据太大而搞混了。第四列总是肯定的吗?你真的需要使用sed吗?sed不支持向前看或向后看,但对于一行解决方案,我认为您需要具有正向向前看功能的东西,比如awk或perlth我得到的输出是:
Mouse\tchr9\t95713136\t95716028\t element 1367\t positive\t positive\t后脑(菱形脑)[5/8]|中脑(中脑)[3/8]|其他[7/8]
其他行给出了类似的输出,它在阳性后工作,但在阳性前工作,正如您所看到的,我有\t\t是制表符。如果你在sed中尝试过,那么你应该使用\t而不是\\t我得到的结果是:
Mouse\tchr9\t95713136\t95716028\t element 1367\t positive\t后脑(菱形脑)[5/8]|中脑(中脑)[3/8]| other[7/8]
其他行给出了类似的输出,它在正数之后工作,但在正数之前工作,正如您所看到的,我有\t\t是制表符。请将其修改为任何内容,例如“空格”,以满足您的需要如果您在sed中尝试过它,那么您应该使用\t而不是\\t