我想要并排放置的基因的 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
我一直在寻找,但是没有找到好的解决方案。
社区可以与我分享您的专业知识吗?
谢谢你。
使用
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
paste(1)
的用途:
$ paste -s "$file"
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
这是手册页所说的
-s
标志应该做的事情:
在命令中连接每个单独输入文件的所有行 行顺序。除最后一行之外的每一行的
输入文件应替换为<newline>
,除非另有说明 由 -d 选项指定。<tab>
您还可以使用
-
代替文件名来处理标准输入。
somecommand | paste -s -
tr '\n' '\t'
和 paste -s
(带有隐含的制表符分隔符)有什么区别?前者甚至会删除尾随的换行符,但 paste
将使最后的换行符保持不变。此外,paste
可以处理标准输入和文件,但 tr
只能 处理标准输入。
你可以使用
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
您可以在串行模式下使用粘贴:
paste -s file
您可以像这样使用
xargs
:
$ xargs -n15 <file
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism
注意
15
是文件中的字数。您可以写一个更大的数字,例如 xargs -n50 < file
,以确保所有内容都打印在同一行中。
还有
printf '%s ' $(< file)
或 printf '%s ' $(cat file)
(如果您的外壳没有 $(< ...)
)。