我有一个文本文件,其中的数据如下所示(准确地说是 1875 行)
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924 10660933 0.818294903 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417 12327426 0.584010382 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433 12327442 0.825226087 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
我正在寻找一种解决方案来提取末尾附近有“+”的行。 (它发生在最后一个之后;
。同样,我希望提取-
股线并放入单独的文件中。
编辑:数据集更改,之前查看了错误的文件。
答案1
从评论中,我了解到您正在寻找提取第七列为+
or的行-
。输入文件以制表符分隔。为此,在将+
行保存到名为 的文件中plus
并将减号行保存到名为 的文件时minus
,最自然的工具可能是awk
:
awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file
怎么运行的:
-F'\t'
awk
一次读入一条记录(行)并将其分成字段。在这里,我们将字段分隔符设置为制表符。$7=="+"{print >"plus"}
如果第 7 个字段是 a
+
,则将该行保存到文件中plus
。$7=="-"{print>"minus"}
类似地,如果第 7 个字段是
-
,则将该行保存在文件中minus
。
答案2
sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile
对于第七个制表符分隔部分,执行以下操作:
sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
/^-/{g;w minus.file' -e 'b
}; /^+/{g;w plus.file' -e \}
但您可能必须使用文字<tab>
字符来代替\t
上面的转义字符。