在 linux 中将多个文件连接成一行

Concatenating multiple files into a single line in linux

我有 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" 可以吗 请指导我。

您只需使用

即可完成此操作
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_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

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

这个呢?

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