1. 概要

Linuxには、ファイルを並べて表示するためのコマンドラインツールがいくつか用意されています。 このチュートリアルでは、これらのコマンドのいくつかを見ていきます。

2. サンプルテキストファイル

例として、2つのファイルがあると仮定します。 最初のファイルinventory-1.txt、には、次のものが含まれています。

$ cat inventory-1.txt
Optical Mouse 10
Ethernet Cables 33

Total Memory In All The Laptops In Bytes 68,719,441,551
23' Monitors 45
Graphic Cards 61

2番目のファイルinventory-2.txtの内容は次のとおりです。

$ cat inventory-2.txt
Ethernet Cables 33
23' Monitors 45
Graphic Cards 61
Wifi Dongles 23
Headphones 5

Linuxでそれらを並べて開く方法を見てみましょう。

3. pr

pr コマンドは、主にテキストファイルのページ付けに使用されます。 さらに、複数のファイルをマージして、オプションでそれらを並べて表示することもできます。 いくつかの例を見てみましょう。

3.1. 一般的な構文

prコマンドの構文は次のとおりです。

pr [OPTION]... [FILE]...

最初の引数OPTIONは、prコマンドの動作を変更するために渡すことができるフラグのリストです。

FILE 引数は、prコマンドによって前処理されるファイルのリストです。 FILE 引数がない場合、または値が’-‘の場合、コマンドは代わりに標準入力から読み取ります。

3.2. ファイルを並べて表示する

Inventory-1.txtinventory-2.txtを並べて表示するには、次のコマンドを実行します。

$ pr -m -t inventory-1.txt inventory-2.txt
Optical Mouse 10		    Ethernet Cables 33
Ethernet Cables 33		    23' Monitors 45
				    Graphic Cards 61
Total Memory In All The Laptops In  Wifi Dongles 23
23' Monitors 45			    Headphones 5
Graphic Cards 61

-mフラグにより、prコマンドは2つのファイルを1つのページの2つの列にマージします。 フラグがない場合、 pr は、両方のファイルを列に表示するのではなく、2ページの出力に連結します。

さらに、フラグ -t は、出力のデフォルトのヘッダーと改行を削除します。

3.3. 列幅を増やす

デフォルトでは、 prは1行あたり72文字しか出力せず、残りのは切り捨てられます。 したがって、前の例では、Inventory-1.txtの4行目が切り捨てられています。

ページ幅を広げるために、フラグ-wを使用します。

$ pr -m -t -w 120 inventory-1.txt inventory-2.txt
Optical Mouse 10					    Ethernet Cables 33
Ethernet Cables 33					    23' Monitors 45
							    Graphic Cards 61
Total Memory In All The Laptops In Bytes 68,719,441,551	    Wifi Dongles 23
23' Monitors 45						    Headphones 5
Graphic Cards 61

3.4. 折り畳みでワードラップを適用する

前のセクションでは、-wフラグを使用してページ幅を増やす方法を説明しました。 ただし、ファイルに画面幅よりも長い行がある場合は、ページ幅だけを増やすのは無駄です。

幸い、 foldコマンドを使用して、最初にテキストファイルを所定のページ幅に折り返し、次にそれらをprと組み合わせることができます。

$ pr -m -t -w 80 <(fold -w 40 inventory-1.txt) <(fold -w 40 inventory-2.txt)
Optical Mouse 10			Ethernet Cables 33
Ethernet Cables 33			23' Monitors 45
					Graphic Cards 61
Total Memory In All The Laptops In Byte Wifi Dongles 23
 68,719,441,551				Headphones 5
23' Monitors 45
Graphic Cards 61

まず、Inventory-1.txtinventory-2.txtの行を、 fold -w40コマンドでそれぞれ40文字幅に折り返します。 次に、ラップされた出力をprコマンドにパイプします。

その結果、ページ全体の幅が80文字で、各列が40文字の幅を占めていることがわかります。 さらに、Inventory-1.txtの4行目が切り捨てられるのではなく折り返されるようになりました。

4. sdiff

sdiff は、2つのファイルを比較し、それらの違いを表示するコマンドです。 このツールは、2つのファイルを並べて開く目的がそれらを比較することである場合に役立ちます

sdiffコマンドで注意すべきことの1つは、比較のために2つのファイルのみを受け入れることです。 したがって、このコマンドは、3つ以上のファイルを並べて開く場合には適していません。

4.1. 一般的な構文

sdiffコマンドの形式は次のとおりです。

sdiff [OPTION]... FILE1 FILE2

OPTION は、コマンドを構成するために適用できるフラグのリストです。 次に、比較するファイルの名前が引数FILE1およびFILE2として渡されます。

4.2. 2つのファイルの違いを並べて表示

2つのファイルの違いを並べて表示するには、sdiffコマンドを実行します。

$ sdiff inventory-1.txt inventory-2.txt
Optical Mouse 10					      <
Ethernet Cables 33						Ethernet Cables 33
							      <
Total Memory In All The Laptops In Bytes 68,719,441,551	      <
23' Monitors 45							23' Monitors 45
Graphic Cards 61						Graphic Cards 61
							      |	Wifi Dongles 23
							      >	Headphones 5

出力から、両方のファイルのコンテンツが並んで配置されていることがわかります。 さらに、出力には「<」、「|」、「>」などの注釈マーカーがあることがわかります。

各マーカーは、2つのファイルの違いを示すために使用されます。

  • より小さい記号'<‘:に存在する行に注釈を付けます FILE1 でも欠席 FILE2
  • 大なり記号’>’: FILE2 には存在するが、FILE1には存在しない行に注釈を付ける
  • パイプ記号’|’:ファイルFILE1FILE2で異なる行に注釈を付けます

5. 貼り付け

past コマンドは、ファイルを1行ずつマージして、複数のファイルの組み合わせを並列に作成するもう1つの便利なコマンドです。 貼り付けコマンドの詳細については、貼り付けの記事をご覧ください。

5.1. 一般的な構文

pastコマンドの一般的な構文は次のとおりです。

paste [OPTION]... [FILE]...

このコマンドを使用すると、OPTION引数を介してフラグを渡すことができます。 さらに、マージされるファイルの名前は、引数FILEで渡されます。

5.2. ファイルを1行ずつマージする

2つのファイルをpasteと並べて組み合わせるには、次のコマンドを実行します。

$ paste inventory-1.txt inventory-2.txt
Optical Mouse 10	Ethernet Cables 33
Ethernet Cables 33	23' Monitors 45
	Graphic Cards 61
Total Memory In All The Laptops In Bytes 68,719,441,551	Wifi Dongles 23
23' Monitors 45	Headphones 5
Graphic Cards 61	

出力から、Inventory-1.txtinventory-2.txtのコンテンツがpasteによって1行ずつマージされていることがわかります。

5.3. を使用した出力の表

past コマンドは、2つのファイルを並べて表示しますが、出力はフォーマットされていません。 読みやすくするために、列コマンドを使用して表にまとめることができます。

DebianベースのLinux(DebianやUbuntuなど)の場合、最初にapt-getを使用してコマンドをインストールする必要があります。

$ apt-get update
$ apt-get install -y bsdmainutils

一方、RedHatベースのLinux(FedoraやCentOSなど)は、デフォルトでOSにバンドルされているため、インストールをスキップできます。 このサイトには別のarticleがあり、ツールの詳細を説明しているため、この記事ではapt-getツールについては説明しません。

貼り付けの出力を表にするには、最初にファイルを1行ずつ貼り付けてマージし、次に出力を列コマンドにパイプしてフォーマットします。 具体的には、DebianベースのLinuxでは:

paste inventory-1.txt inventory-2.txt | column -t -s $'\t' -n

一方、RedHatベースのLinuxは、-nフラグなしでコマンドを実行できます。

paste inventory-1.txt inventory-2.txt | column -t -s $'\t'

-t フラグは、 column コマンドに、区切り文字をガイドとして使用して列を作成することにより、入力を表にするように指示します。 次に、-sフラグを使用して区切りタブ文字を指定します。 基本的に、 column コマンドは、入力にタブ文字が含まれている場合は常に、その後に続くシーケンスを新しい列として扱います。

最後に、DebianベースのLinuxでは -nフラグが必要です。これにより、空のセルが有効なセルとして解釈されます。フラグがない場合、出力は次のようになります。

$ paste inventory-1.txt inventory-2.txt | column -t -s $'\t'
Optical Mouse 10                                         Ethernet Cables 33
Ethernet Cables 33                                       23' Monitors 45
Graphic Cards 61
Total Memory In All The Laptops In Bytes 68,719,441,551  Wifi Dongles 23
23' Monitors 45                                          Headphones 5
Graphic Cards 61

出力から、columnコマンドがinventory-1.txtの空の行を解釈していないことがわかります。 その結果、代わりにInventory-2.txtの対応する行が左にシフトします。

6.  tmux

tmux は、複数の端末を同時に作成して使用できる強力なツールです。 ファイルを並べて表示するだけでなく、システムで使用可能な任意のテキストエディタを使用してファイルを編集することもできます。

6.1. インストール

まず、次のコマンドを実行してtmuxをインストールする必要があります。

$ apt-get update
$ apt-get install -y tmux

次に、tmuxののバージョンを取得してインストールを確認できます。

$ tmux -V
tmux 3.0a

バージョンが返される場合、インストールは成功しています。

6.2. tmuxを使用してファイルを並べて表示する

Inventory-1.txtinventory-2.txtを並べて表示するには、次のコマンドを実行します。

$ tmux new-session \; send-keys 'cat inventory-1.txt' C-m \; split-window -h \; send-keys 'cat inventory-2.txt' C-m \;

上記のコマンドは、最初にtmuxnew-session引数を使用して新しいセッションを作成します。 次に、作成した端末に catInventory-1.txtコマンドを送信します。 文字Cmは、端末で送信されたコマンドを実行します。

次に、 split-window -h コマンドを発行します。このコマンドは、最初のウィンドウの横に新しいターミナルを作成することにより、現在のウィンドウを水平方向に分割します。 最後に、新しい端末で2番目の catInventory-2.txtコマンドを発行します。

コマンドが実行されると、次の図に示すように、2つのウィンドウが並列に接続されたtmuxセッションが作成されます。

ファイルを編集したい場合は、catコマンドをvi、vim、nanoなどのテキストエディターコマンドに置き換えることができます

最後に、 tmux セッションを終了するには、キー CTRL +bおよびxを押すだけです。 次に、セッションを強制終了するように求められたら、yと入力します。

7. 結論

この記事では、Linuxで複数のファイルを並べて表示するさまざまな方法を見てきました。

prコマンドを使用してファイルを結合することから始めました。 次に、 sdiff を使用して、ファイルを並べて比較しました。

次に、 past コマンドを見て、ファイルを1行ずつマージします。 また、columnコマンドを使用して出力をフォーマットするためのステップをさらに進めました。

最後に、 tmux を導入しました。これは、ファイルを並べて表示するだけでなく、テキストエディターでファイルを操作する機能も提供します。