-
-

更新履歴

-
    -
  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
-
-

- ときどき便利。 -

-
-