我希望将基因的KEGG途径的标准输出放在一起,无论它有多少条KEGG途径。例如,基因TT123456涉及多种途径:
Valine, leucine and isoleucine degradation
Histidine metabolism
Ascorbate and aldarate metabolism
Lysine degradation
Glycerolipid metabolism
使用sed命令
sed '$!N;s/\n/\t/'
我能够并排连接两条线
Valine, leucine and isoleucine degradation Histidine metabolism
Ascorbate and aldarate metabolism Lysine degradation
Glycerolipid metabolism
但是,我希望输出为
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
我一直在寻找,但是,我找不到一个好的解决方案。
社区请与我分享您的专业知识吗?
谢谢。
答案 0 :(得分:4)
使用awk
:
awk 'ORS="\t"' file
$ awk 'ORS="\t"' file
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
如果您希望使用sed
,请:
$ sed ':a;N;s/\n/\t/;ba' file
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
答案 1 :(得分:4)
这正是paste(1)
的用途:
$ paste -s "$file"
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
以下是-s
标志应该执行的联机帮助页:
在命令中连接每个单独输入文件的所有行 行顺序。每行的
<newline>
除了每行之外的最后一行 除非另有说明,否则输入文件应替换为<tab>
由-d选项指定。
您还可以使用-
而不是文件名来处理标准输入。
somecommand | paste -s -
tr '\n' '\t'
和paste -s
之间有什么区别(带有隐含的制表符分隔符)?前者将删除尾随换行符,但paste
将保留最终换行符。此外,paste
可以同时处理标准输入和文件,但tr
只能 处理标准输入。
答案 2 :(得分:3)
您可以使用tr
:
tr '\n' '\t' < inputfile
为了您的输入,它会产生:
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
使用sed:
sed '$!{:a;N;s/\n/\t/;ta}' inputfile
答案 3 :(得分:1)
您可以在串行模式下使用粘贴:
paste -s file
答案 4 :(得分:0)
您可以像这样使用xargs
:
$ xargs -n15 <file
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
注意15
是文件中的字数。您可以写一个更大的数字,如xargs -n50 < file
,以确保所有内容都打印在同一行。
答案 5 :(得分:0)
如果您的shell没有printf '%s ' $(< file)
,还可以printf '%s ' $(cat file)
或$(< ...)
。