From d30dfc89bf1b673b2fdc0638766b930adaec228c Mon Sep 17 00:00:00 2001
From: nsfisis a.txt
a1
-a2
-a3
+ a1
+a2
+a3
+
b.txt
b1
-b2
-b3
+ b1
+b2
+b3
+
ab.txt
a1
-b1
-a2
-b2
-a3
-b3
+ a1
+b1
+a2
+b2
+a3
+b3
+
ちょうど Python や Haskell などにある zip 関数のような動きをさせたい。
@@ -114,8 +119,10 @@ b3
記事タイトルに書いたように、paste コマンドを使うと実現できる。
$ paste -d '\
-' a.txt b.txt > ab.txt
+ $ paste -d '\
+' a.txt b.txt > ab.txt
+
paste コマンドは複数のファイルを引数に取り、それらを1行ずつ消費しながら -d で指定した文字で区切って出力する。-d は区切り文字の指定で、デフォルトだとタブ区切りになる。
@@ -125,22 +132,26 @@ b3
ファイル名には - を指定でき、その場合は標準入力から読み込んで出力する。このとき paste - - のように複数回 - を指定すると、指定した回数の行ごとに連結することができる。例えば ab.txt だとこうなる。
$ paste - - < ab.txt
-a1 b1
-a2 b2
-a3 b3
+ $ 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
+ $ paste ab.txt ab.txt
+a1 a1
+b1 b1
+a2 a2
+b2 b2
+a3 a3
+b3 b3
+ ときどき便利。 -- cgit v1.2.3-70-g09d2