【问题标题】:Concatenating multiple files into a single line in linux在linux中将多个文件连接成一行
【发布时间】:2016-11-14 21:10:25
【问题描述】:

我有 3 个类似以下的 fasta 文件

>file_1_head
haszhaskjkjkjkfaiezqbsga    
>file_1_body
loizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdja    
>file_1_tail
mnnbasnbdnztoaosdhgas

我想将它们连接成一个像下面这样的单个

>file_1
haszhaskjkjkjkfaiezqbsgaloizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdjamnnbasnbdnztoaosdhgas

我尝试使用 cat 命令cat file_1_head.fasta file_1_body.fasta file_1_tail.fasta,但它没有像上面那样连接成一行。是否可以使用“awk”请指导我。

【问题讨论】:

  • 这是一项微不足道的任务。您尝试过自己解决什么问题?
  • @hek2mgl 我试过的我在我的问题中提到过。我尝试使用“cat”命令,但它只是将所有行放在一个新行中。请检查它
  • 是的,我读到了。但我想念你试图解决问题的东西

标签: awk concatenation fasta


【解决方案1】:

你的意思是你的三个文件有内容吗

file_1_head.fasta

>file_1_head
haszhaskjkjkjkfaiezqbsga    

file_1_body.fasta

>file_1_body
loizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdja    

file_1_tail.fasta

>file_1_tail
mnnbasnbdnztoaosdhgas

在第一行包括其中每个人的名称?

那你就可以了

(echo ">file_1"; tail -qn -1 file_1_{head,body,tail}.fasta | tr -d "\n\t ") > file_1.fasta

获取file_1.fasta

>file_1
haszhaskjkjkjkfaiezqbsgaloizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdjamnnbasnbdnztoaosdhgas

这也删除了我在逐字复制时得到的输入行末尾的一些额外空格。

【讨论】:

    【解决方案2】:

    你可以简单地做到这一点

    cat file1 file2 file3 | tr -d '\n' > new_file
    

    tr 删除换行符。

    编辑:

    对于您特定的第一行,只需这样做

    echo file_1 > new_file
    cat file1 file2 file3 | tr -d '\n' >> new_file
    

    第一个命令创建了包含一行file_1 的文件。然后cat... 命令只是附加到这个文件。

    【讨论】:

    • 谢谢。但是你的命令给了我如下输出>file_1haszhaskjkjkjkfaiezqbsgaloizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdjamnbasnbdnztoaosdhgas。我想要上面提到的输出
    • 编辑了我的答案。
    • 它给了我如下输出:file_1 >file_1_headhaszhaskjkjkjkfaiezqbsga>file_1_bodyloizztzezzqieovbahsgzqwqoiropoqiwoioioiweoitwwerweuiruwieurhcabccjashdja>file_1_tailmnbasnbdnztoaosdhgas
    • 恐怕你必须更清楚地解释你想要什么以及你现在是如何做到的。 file_1_head 是文件中的内容吗?而且您不希望以> 或什么开头的行?我需要详细信息。如果是这样,你可以用cat file1 file2 file3 | grep -v "^>" | tr ...跳过那些行
    【解决方案3】:

    这个怎么样?

    awk 'BEGIN { RS=""} {for (i=1;i<=NF;i++) { printf "%s",$i } }' f1_head f1_body f1_tail
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2022-11-23
      • 2021-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-06
      相关资源
      最近更新 更多