将长输出分成两列


20

是否有一个简单的实用程序或脚本来对我的一个脚本的输出进行列化?我有某种形式的数据:

A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn
F kjhnakjshddnaskjdh

但是如果这变成两个长,则以以下形式写入数据(仍然按垂直顺序排列):

A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

通过阅读手册页,我认为这column不适合,但我不确定。拆分表格很容易:

A B 
C D 
E F

通过仅\n每隔两行打印一次(我当前脚本执行的操作)。有任何想法吗?谢谢!

Answers:


16

您实际上尝试过 column吗?似乎正是您想要的:

$ cat file
A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn

$ column file
A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

我试过了 但他们的错误(与-t)... But for yours to work reliably you probably need --columns`。
Hauke Laging

我确实尝试过,但是由于某种原因,我没有意识到它取决于终端窗口的宽度(现在看来很明显)!
Hemmer 2013年

我也同时在两台机器上进行了测试。显然,旧版本(在Scientific Linux上大约在1993年)的行为与2004年新版本不同……
Hemmer 2013年

11

要对输出进行列化,请pr转换文本文件以进行打印:

-COLUMN, --columns=COLUMN: output COLUMN columns
      and print columns down, unless -a is used.

-t, --omit-header : omit page headers and trailers

例如

ls /etc | pr -2 -t
abrt                                gtk-2.0
acpi                                hal
adjtime                             hba.conf
agent.properties                    host.conf
aliases                             hosts
aliases.db                          hosts.allow
...

对于大文件(长文件)无法正常工作。
一次

2

您可以将文件分成两部分(行数相同,或者第一个文件多行),然后执行以下操作:

paste file1 file2

如果行的长度差异太大,则可能有必要使用printf通过填充空格来适应长度。


... | paste - - “拆分长输出”时...
don_crissti 2015年

1

您可以只使用Plain columns

$ cat test.txt | columns
A aldkhasdfljhaf             B klajsdfhalsdfh             C salkjsdjkladdag
D lseuiorlhisnflkc           E sdjklfhnslkdfhn            F kjhnakjshddnaskjdh

注意:columns命令是autogenFedora 14系统上软件包的一部分。

$ rpm -qf /usr/bin/columns
autogen-5.9.4-7.fc12.x86_64

参考文献


columns: command not foundautogen
吉尔(Gilles)'所以

@Gilles-是的一部分autogen。刚刚检查了我的Fedora 14系统。我也会在答案中提到它。
slm
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.