【问题标题】:Search for specific characters in specific positions of line在行的特定位置搜索特定字符
【发布时间】:2014-03-26 22:54:49
【问题描述】:

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

文件sequence.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

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

希望有人可以帮助我, 万事如意

【问题讨论】:

  • 那么你想要的输出应该是什么样子?

标签: linux shell


【解决方案1】:

在第 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

【讨论】:

    【解决方案2】:

    awks 子字符串操作在这里可能很有用。大致如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      相关资源
      最近更新 更多