Bash

如何列印多列而不截斷?

  • April 18, 2018

我知道這pr -m -t file1 file2會給我 2 列,如下所示:

文件1:

a
abc
abcdefg
abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

文件2:

1
123
12345678
12345678901234567890
$ pr -m -t file1 file2
a                   1
abc                 123
abcdefg                 12345678
abcdefghijklmnopqrstuvwxyzabcdefghi 12345678901234567890

上面是文字剪切和粘貼,但在這裡我添加了空格以顯示它在終端中的實際排列方式:

$ pr -m -t file1 file2
a                                   1
abc                                 123
abcdefg                             12345678
abcdefghijklmnopqrstuvwxyzabcdefghi 12345678901234567890

出於某種原因,unix堆棧交換不會使程式碼塊穩固。無論如何,我不需要匹配的行號(但要回答一般問題,您也可以回答如何做到這一點),但我想要的主要屬性是讓它換行而不是被截斷。我是否別無選擇,只能將每個文件預處理到一定的寬度並將其輸入?如果是這樣,我該怎麼做呢?

更新:我想如果有一些command限製文件的寬度並強制換行,我會這樣做:pr -m -t <(command file1) <(command file2)

編輯:

關心對齊?

如果您使用此處找到的 perl 腳本,由Peter Stuifzand編寫,並為其命名columnFix.perl並且chmod u+x columnFix.perl(為確保您可以執行它,您可以這樣做:

pr -J -m -t file1 file2 | /path/to/columnFix.perl

原答案:

I的版本pr預設將行截斷為 72 個字元,其中 2 列將第一列截斷為 35 (35 char/column * 2 columns) + 1 char/separator = 71 characters(因此第二列可能是 36 個字元)。

因此,如果您在沒有列對齊的情況下沒問題(這與建議的粘貼命令類似的結果),那麼您已經執行但使用 a-J應該執行您似乎正在尋找的命令(盡可能接近您的原始命令)在評論中)

pr -J -m -t file1 file2

從手冊頁:

-J,–加入線

合併整行,關閉 -W 行截斷,無列對齊,–sep-string

$$ =STRING $$設置分隔符

引用自:https://unix.stackexchange.com/questions/438597