如何让 sed 并排输出?

问题描述 投票:0回答:6

我想要并排放置的基因的 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

我一直在寻找,但是没有找到好的解决方案。

社区可以与我分享您的专业知识吗?

谢谢你。

bash sed layout
6个回答
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

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
只能 处理标准输入。


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

1
投票

您可以在串行模式下使用粘贴:

paste -s file

0
投票

您可以像这样使用

xargs

$ xargs -n15 <file
Valine, leucine and isoleucine degradation Histidine metabolism Ascorbate and aldarate metabolism Lysine degradation Glycerolipid metabolism

注意

15
是文件中的字数。您可以写一个更大的数字,例如
xargs -n50 < file
,以确保所有内容都打印在同一行中。


0
投票

还有

printf '%s ' $(< file)
printf '%s ' $(cat file)
(如果您的外壳没有
$(< ...)
)。

© www.soinside.com 2019 - 2024. All rights reserved.