+
+

更新履歴

+
    +
  1. + : デジタルサーカス株式会社の社内記事として公開 +
  2. +
  3. + : ブログ記事として一般公開 +
  4. +
+
+
+
+ NOTE +
+
+ この記事は、2021-03-22 にデジタルサーカス株式会社 の社内 Qiita Team に公開された記事をベースに、加筆修正して一般公開したものです。 +
+
+ +
+

実現したい内容

+

+ 次の2ファイル a.txt / b.txt から出力 ab.txt を得たい。 +

+ +

+ a.txt +

+ +
a1
+a2
+a3
+ +

+ b.txt +

+ +
b1
+b2
+b3
+ +

+ ab.txt +

+ +
a1
+b1
+a2
+b2
+a3
+b3
+ +

+ ちょうど Python や Haskell などにある zip 関数のような動きをさせたい。 +

+
+ +
+

実現方法

+

+ 記事タイトルに書いたように、paste コマンドを使うと実現できる。 +

+ +
$ paste -d '\
+' a.txt b.txt > ab.txt
+ +

+ paste コマンドは複数のファイルを引数に取り、それらを1行ずつ消費しながら -d で指定した文字で区切って出力する。-d は区切り文字の指定で、デフォルトだとタブ区切りになる。 +

+ +

+ ファイル名には - を指定でき、その場合は標準入力から読み込んで出力する。このとき paste - - のように複数回 - を指定すると、指定した回数の行ごとに連結することができる。例えば ab.txt だとこうなる。 +

+ +
$ paste - - < ab.txt
+a1	b1
+a2	b2
+a3	b3
+ +

+ これは標準入力を使うとき特有の挙動で、単に同じファイル名を指定してもこうはならない。 +

+ +
$ paste ab.txt ab.txt
+a1	a1
+b1	b1
+a2	a2
+b2	b2
+a3	a3
+b3	b3
+ +

+ ときどき便利。 +

+
+