Bash
如何列印多列而不截斷?
我知道這
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 $$設置分隔符