Infra Engineer

Linuxのテキストフィルタ処理~pasteコマンド・joinコマンド~
2021.02.01
Lv1

Linuxのテキストフィルタ処理~pasteコマンド・joinコマンド~

今回の内容

今回は、paste・joinコマンドについて解説します。

paste

ファイルを行単位で結合するには、「paste」コマンドを使用します。

pasteコマンド
意味 1つ以上のファイルを読み取ってそれぞれで一致する行を水平方向
に連結する。
書式 paste [オプション] [ファイル名1] [ファイル名2] …
オプション 説明
-s ファイル全体を1行に結合。
-d 区切り文字(デリミタ)を指定。

——————–

サンプルファイルの作成
viコマンドで「sample1.txt」と「sample2.txt」を作成
[root@localhost ~]# vi sample1.txt
[root@localhost ~]# cat sample1.txt
01 AAAAA abcde
02 bbbbb fghij
03 ccccc klmno
04 ddddd pqrst
05 eeeee uvwxy

★(1行目の「AAAAA」と数字以外は、小文字)

[root@localhost ~]#
[root@localhost ~]# vi sample2.txt
[root@localhost ~]# cat sample2.txt
01 AAAAA ABCDE
02 BBBBB FGHIJ
03 CCCCC KLMNO
04 DDDDD PQRST

★(数字以外は、大文字)
[root@localhost ~]#

——————–

例)行ごとに結合して表示
「sample1.txt」と「sample2.txt」を行ごとに結合して表示。
[root@localhost ~]# paste sample1.txt sample2.txt
01 AAAAA abcde  01 AAAAA ABCDE
02 bbbbb fghij  02 BBBBB FGHIJ
03 ccccc klmno  03 CCCCC KLMNO
04 ddddd pqrst  04 DDDDD PQRST
05 eeeee uvwxy
[root@localhost ~]#

——————–

例)各ファイルを1行にして表示
「sample1.txt」と「sample2.txt」の各ファイルを1行にして表示。
[root@localhost ~]# paste -s sample1.txt sample2.txt
01 AAAAA abcde  02 bbbbb fghij  03 ccccc klmno  04 ddddd pqrst  05 eeeee uvwxy
01 AAAAA ABCDE  02 BBBBB FGHIJ  03 CCCCC KLMNO  04 DDDDD PQRST
[root@localhost ~]#

——————–

例)行ごとに結合して表示(区切り文字「,」指定)
「sample1.txt」と「sample2.txt」を行ごとに結合して表示(区切り文字「,」指定)。
[root@localhost ~]# paste -d , sample1.txt sample2.txt
01 AAAAA abcde,01 AAAAA ABCDE
02 bbbbb fghij,02 BBBBB FGHIJ
03 ccccc klmno,03 CCCCC KLMNO
04 ddddd pqrst,04 DDDDD PQRST
05 eeeee uvwxy,
[root@localhost ~]#

——————–

joinコマンド

2つのファイルを読み、フィールドが共通する行を結合する場合には、「join」コマンドを使
用します。

コマンド
意味 2つのファイルを読み取って共通のフィールドを持つ行を連結する。
書式 join [オプション] [ファイル名1] [ファイル名2]
オプション 説明
-j 連結するフィールドを指定。
-t フィールドの区切り文字としてを指定。
例)共通する行を結合して表示
「sample1.txt」と「sample2.txt」の共通する行を結合して表示。
01 AAAAA abcde AAAAA ABCDE
02 bbbbb fghij BBBBB FGHIJ
03 ccccc klmno CCCCC KLMNO
04 ddddd pqrst DDDDD PQRST
★05は共通していないので、出力されない=左に共有部分のみ
[root@localhost ~]#

——————–

例)2つ目のフィールドが共通する行を結合して表示
「sample1.txt」と「sample2.txt」の2つ目のフィールドが共通する行を結合して表示。
[root@localhost ~]# cat sample1.txt
01 AAAAA abcde
02 bbbbb fghij
03 ccccc klmno
04 ddddd pqrst
05 eeeee uvwxy
[root@localhost ~]# cat sample2.txt
01 AAAAA ABCDE
02 BBBBB FGHIJ
03 CCCCC KLMNO
04 DDDDD PQRST
[root@localhost ~]#
[root@localhost ~]# join -j 2 sample1.txt sample2.txt
AAAAA 01 abcde 01 ABCDE
★AAAAAだけ一致なので、一行しか出てこない
[root@localhost ~]#

——————–

まとめ

pasteコマンドとjoinコマンドを実行した際の表示結果しっかり覚えておきましょう!
それでは今回はこのあたりで。

確認問題

問題1

ファイルを行単位で結合するコマンドで、正しい選択肢を1つ選びなさい。

A) cat
B) paste
C) head
D) tail

解答・解説
答え:B

A) ⇒ ファイルの中身を表示するコマンドなので、誤りです。
B) ⇒ ファイルを行単位で結合するコマンドです。
C) ⇒ ファイルの先頭部分を表示するコマンドなので誤りです。
D) ⇒ ファイルの末尾部分を表示するコマンドなので、誤りです。

問題2

フィールドが共通する行を結合するコマンドで、正しい選択肢を1つ選びなさい。

A) od
B) make
C) hexdump
D) join

解答・解説
答え:D

A) ⇒ ファイルの内容を8進数、16進数で表示するコマンドなので、誤りです。
B) ⇒ コンパイルするコマンドなので、誤りです。
C) ⇒ ファイルの内容を16進数で表示するコマンドなので、誤りです。
D) ⇒ フィールドが共通する行を結合するコマンドです。

Linux資格 「LPIC Lv1」徹底解説 連載目次リンク

Linux資格 「LPIC Lv1」徹底解説 連載目次

連載執筆講師が講座開講中!ITスクール SAK

ITスクールSAK | LPIC Lv1合格保証コース 講座紹介ページ