【问题标题】:sed everything in front of second pipe symbolsed 在第二个管道符号前面的所有内容
【发布时间】:2020-01-27 20:21:08
【问题描述】:

我只想删除第二个管道符号(包括管道符号)前面的所有内容,直到大于号(保留它)。可惜我是初学者,网上没有发现类似的问题。

例如

>ENA|FXSY01000001|FXSY01000001.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>ENA|FXSY01000001|FXSY01000002.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>ENA|FXSY01000001|FXSY01000003.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC

从@VJC 重新编辑 输出新要求:

>FXSY01000001.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000002.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000003.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC

根据 shellter 的建议,它给了我以下输出:awk -F\| '/^>/{print ">" $NF}1' file > newFile

>FXSY01000001.1
>ENA|FXSY01000001|FXSY01000001.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000002.1
>ENA|FXSY01000001|FXSY01000002.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000003.1
>ENA|FXSY01000001|FXSY01000003.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC

但已修复:sed '/^#/ d' < inputFile.txt > outputFile.txt

>FXSY01000001.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000002.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC
>FXSY01000003.1
AAAATCTTATTTTATTTTTTCCCTGTCGGCAGCAATTCATTCACCCCCTCACTTTTTAAT
ATTTTTAACTGCAAGATGAATAAAAATAAATTTTTCTCTCCACTCCATCATCCTGCTATA
TACATTTTTACTTTTTTTAATATTTTCCTTCCAATCATCACTACTTTATTTTTATTTCC

【问题讨论】:

  • 欢迎来到 SO,感谢您诚实地讲述您尝试解决自己的问题的方法,在 SO 上,我们互相指导以寻求正确/最佳的解决方案,我们甚至会毫不犹豫地发布我们的方法(不'即使我们尝试了错误的方法也没关系)在我们的帖子中;重要的是我们应该提及我们的努力,继续努力并在这个伟大的网站上愉快地学习所以
  • awk -F\| '{print $NF}' file > newFile 如果我正确理解您的要求。在 S.O. 上它总是很好的形式。将您的示例输入中所需的输出包含在问题正文中(而不是作为回复评论;-!)。祝你好运。
  • sed 's/.*|//' file?
  • @shellter:它完成了这项工作。非常感谢!以下输出的必要命令是什么:>FXSY01012088.1FURTHER INFO >FXSY01012089.1FURTHER INFO >FXSY01012090.1FURTHER INFO >FXSY01012091.1FURTHER INFO
  • 查看我的编辑。那是你需要的输出吗? (你现在明白为什么在 Q 的正文中包含你的确切要求的输出很重要吗?)。如果这是您需要的,那么您只需要awk -F\| '{print ">"$NR}' file > newFile。通过Awk tutorial 和你的游戏相当大的工作;-)。祝你好运。

标签: awk sed cut


【解决方案1】:

请您尝试关注一下。

sed 's/\([^|]*\)|\([^|]*\)|\(.*\)/\3/'  Input_file

简要说明: 使用sed 的临时缓冲区概念,我们可以将匹配的正则表达式保存在内存中,也可以给它们编号。在这里,我将第一次出现 | 之前的所有内容保留在第一个指针中,并将第一次出现 | 之后的所有内容保留到下一次出现 | 到第二个位置。然后将所有内容保留在第三个指针中。稍后根据要求用第三个指针替换整行。

【讨论】:

  • 感谢您的快速回复。我试过了,但它没有删除任何东西。
  • @VJC,如果是,您想将输出保存到 Input_file 本身,然后尝试(这将首先取回 Input_file,然后编辑实际的 Input_file 并将输出保存到 Input_file 本身),sed -i.bak 's/\([^|]*\)|\([^|]*\)|\(.*\)/\3/' Input_file 并让那我知道吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2016-11-08
  • 2022-06-11
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多