GNU/Linux >> Linux の 問題 >  >> Linux

2つのファイルを2つの列に印刷しますか?

2つのファイルを2列に印刷したいのですが、最初のファイルは左側に、2番目のファイルは右側にあります。

paste 区切り文字として文字を挿入することしかできないため、この機能は実行されません。したがって、最初のファイル行の長さが異なる場合、出力はねじれます:

$ cat file1
looooooooong line
line
$ cat file2
hello
world
$ paste file1 file2
looooooooong line   hello
line    world

fmt --add-spaces --width 50のような末尾のスペースを追加するコマンドの場合 問題は解決されます:

$ paste <(fmt --add-spaces --width 50 file1) file2
looooooooong line                                 hello
line                                              world

しかし、これを行う簡単な方法はわかりません。

では、ねじることなく複数のファイルを水平方向にマージして印刷するにはどうすればよいでしょうか。実際、私はそれらを同時に見たいだけです。

UPD: 末尾にスペースを追加するコマンドは存在します(たとえば、xargs -d 'n' printf '%-50sn'

しかし、

のようなソリューション
$ paste <(add-trailing-spaces file1) file2

file1の行数がfile2より少ない場合、期待どおりに機能しません。

承認された回答:

paste file{1,2}| column -s $'t' -tn

looooooooong line line  hello
line                    world
  • これはcolumnに伝えています Tabを使用するには pasteから取得する列の区切り文字として 指定されていない場合、そこにあるデフォルトの区切り文字であるコマンド。一般的に:

    paste -d'X' file{1,2}| column -s $'X' -tn

    ここで、X 任意の1文字を意味します。ファイルに表示されないことを許可したものを選択する必要があります。

  • -t オプションは、入力に含まれる列の数を決定するために使用されます。

  • これにより、2つのファイルの間に長いタブが追加されることはありませんが、他の回答では追加されます。
  • これは、file1に空の行があった場合でも機能し、file1の印刷領域に2番目のファイルを印刷しません 、以下の入力/出力を参照

    入力ファイル1:

    looooooooong line
    
    line
    

    入力ファイル2:

    hello
    world
    

    出力:

    looooooooong line  hello
                       world
    line
    

Linux
  1. 2つのファイルを区切り文字のトリプルパイプ記号「|||」で1行ずつマージしますか?

  2. GNU/Linux における 2 つのファイル (行のセットとして) のデカルト積

  3. unix - ファイル内の列数

  1. 2 つのファイルを並べて表示する

  2. 2 つのファイルを 1 行ずつ一貫してマージする方法

  3. JSONプリティプリントを1行に変換する

  1. Linuxでファイルをすばやく検索するための5つのコマンドラインツール

  2. 異なるファイルの2つの列を比較し、一致する場合は印刷しますか?

  3. 2 つのファイルの最初の行だけを比較するには?