2021.02.01
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
問題2
フィールドが共通する行を結合するコマンドで、正しい選択肢を1つ選びなさい。
A) od
B) make
C) hexdump
D) join