1. ホーム
  2. linux

[解決済み] 2つのファイルを並べて表示する

2022-10-10 02:13:14

質問

長さの異なる2つのソートされていないテキストファイルを並べて表示するにはどうしたらよいでしょうか。 (列) の中に shell

与えられた one.txttwo.txt :

$ cat one.txt
apple
pear
longer line than the last two
last line

$ cat two.txt
The quick brown fox..
foo
bar 
linux

skipped a line

表示します。

apple                               The quick brown fox..
pear                                foo
longer line than the last two       bar 
last line                           linux

                                    skipped a line

paste one.txt two.txt はほとんどトリックを行いますが、カラム1と2の間に1つのタブが表示されるだけなので、カラムをきれいに整列させることはできません。 私は emacs と vim でこれを行う方法を知っていますが、パイプ処理などのために標準出力に表示される出力が必要です。

私が思いついた解決策は sdiff を出力し、sed にパイプし、出力を削除します。 sdiff が追加されます。

sdiff one.txt two.txt | sed -r 's/[<>|]//;s/(\t){3}//'

関数を作成し、それを .bashrc に貼り付けることもできますが、きっとこのためのコマンドはすでに存在しているのでしょう (あるいは クリーナー ソリューションの可能性もあります)?

どのように解決するのですか?

この場合 pr を使用して、これを行うことができます。 -m フラグを使用して、各カラムごとにファイルをマージし、さらに -t でヘッダを省略します。

pr -m -t one.txt two.txt

の出力があります。

apple                               The quick brown fox..
pear                                foo
longer line than the last two       bar
last line                           linux

                                    skipped a line

こちらもご覧ください。