首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打开字符串中基于输入值的文件排序

打开字符串中基于输入值的文件排序
EN

Stack Overflow用户
提问于 2019-09-19 21:49:21
回答 1查看 68关注 0票数 2

我有一个具有以下格式的文件,我需要读取以‘’>开头的字符串,并根据OS=按字母顺序对行进行排序。

代码语言:javascript
运行
复制
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL

期望产出:

代码语言:javascript
运行
复制
>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE

到目前为止我的代码是:

代码语言:javascript
运行
复制
while read p;
if [[ $p == >* ]];
then
#what should I do here to sort the line by OS ? 

done <input.txt
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-20 01:42:50

你能试一下吗。

代码语言:javascript
运行
复制
awk '
/^>/{
  if(val){
    print val}
    val=""
  }
  {
    val=(val?val "##":"")$0
  }
END{
    if(val){
      print val
    }
}' Input_file | sort -k2.4 | tr -s '##' '\n'

解释:考虑到您的Input_file中没有##,否则您可以将它们更改为任何其他字符串。基本上,我在添加从>开始到最后一行的行,这些行是在下一次出现>之前,通过##分隔符将它们添加到一行中(您可以更改它,我已经提到了),然后用第二个字段对它们进行排序,最后再将## by tr命令移到新行。

输出如下(为提供的示例运行之后):

代码语言:javascript
运行
复制
>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58019313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档