二つのファイルの行を一つの行にまとめて出力する
二つのファイルの行を一つの行に、たとえばタブ区切りで並べて出力できればグラフにする時に便利だなあとずっと思っていたので、perlで作ってみました。名前はmerge_2file.plとしてみました。
ソース
#!/usr/bin/perl use strict; use warnings; #引数が二個入力されてなかったら終了 if (@ARGV != 2){ die "usage: merge_2file.pl FILE1 FILE2\n"; } my $i = 0; #FILE1読み込み open(IN1, "$ARGV[0]") or die "file open error:$!\n"; #FILE1の中身を配列に格納 my @array1 = <IN1>; #FILE1のクローズ close(IN1); #FILE2読み込み open(IN2, "$ARGV[1]") or die "file open error:$!\n"; #FILE2の中身を配列に格納 my @array2 = <IN2>; #FILE2のクローズ close(IN2); foreach (@array2){ #改行コード削除 chomp($array1[$i]); #出力 print $array1[$i] , "\t" , "$_"; $i += 1; }
使い方
merge_2file.pl tmp.list tmp2.list
tmp.listの中身が
10:01 10:02 :
tmp2.listの中身が
10.5 20.5 :
だとすると、実行すると
10:01 10.5 10:02 20.5 :
になります。素晴らしい。
・・・と、自己満足に浸っていたところ、LinuxやSolarisの標準コマンドで同じ機能が実現されている事を知りました。
ここやここで説明されているpasteというコマンドを使ってみたら、私の作ったスクリプトと同じ動作になりました。いや、pasteは三つ以上のファイルも読み込めるみたいなので、むしろ優れています(当たり前です)。
ああ、これが「便利な道具があるにも関わらず、一から同じ道具を作ってしまう無駄」、すなわち車輪の再発明ってやつですか・・・。がっかり。
せっかくなので使い方の説明です。
pasteの使い方
paste tmp.list tmp2.list
ファイルは上と同じです。実行すると
10:01 10.5 10:02 20.5 :
となります。
paste -d "," tmp.list tmp2.list
とdオプションをつけてやると、
10:01,10.5 10:02,20.5 :
というように、区切り文字を変更できます。
せっかく作った道具がすでに存在したのは残念ですが、一から作った満足感は残ったので良しとしますわ・・・。
ではー。