在线的特定位置搜索特定字符

时间:2014-03-26 12:51:53

标签: linux shell

我在linux世界中相当新,我需要你的帮助。 我需要一个代码来搜索文本文件中特定位置的特定字符。 即

文件sequences.txt如下所示:

ACGTCAGTCAG**T**CAGCATC**G**ATCGACTACGACCGTAGCTAGCTATACGACT**G**ATCAGCTACGATCAGCTACGATCAGCTACGAT
ACGTCAGTCAG**A**CAGCATC**C**ATCGACCATGCTAGCCGTACGATTAGCGACT**C**ATCAGCTACGATCAGCTACGATCAGCTACGAT
ACGTCAGTCAG**T**CAGCATCATCGACTACGACTACGATCGATCGATCGGACT**G**ATCAGCTACGATCAGCTACGATCAGCTACGATG
ACGTCAGTCAG**A**CAGCATC**G**ATCGACTACGACGATCGATCGATCTACGACT**C**ATCAGCTACGATCAGCTACGATCAGCTACGAT

我想要的是将数据集拆分为不同的输出文件,将包含相同特定字符的相等行分组。

希望有人可以帮助我, 一切顺利

2 个答案:

答案 0 :(得分:0)

在第42位搜寻“foo”:

egrep '^.{42}foo'

您可以在输入上多次运行这样的命令:

egrep '^.{42}foo' inputfile.txt > lineswithfoo.txt
egrep '^.{42}bar' inputfile.txt > lineswithbar.txt
...

或作为循环:

for pattern in foo bar qux; do
  egrep "^.{42}$pattern" inputfile.txt > lineswith$pattern.txt
done

答案 1 :(得分:0)

awk的子字符串操作在这里可能很有用。这些方面的东西:

awk '{ x=substr($0, 42, 3); print > "output" x ".txt"}'

这将从位置42开始每行的3个字符的子串(基于0的索引,记住),并从该子串形成输出文件名“outputXYZ.txt”,然后将该行追加到它。