データを識別子 (ID) を使って結合する(マッチマージ)
複数のファイルにまたがっているデータを個人識別子 ID を使って結合する方法は大きなデータ処理ソフト (SAS, SPSS)では当たり前ですが,表計算ソフトでは少々やっかいで,私はその方法を知りません.そこでスクリプトを書いてみました.制限が多いのですが,これでも結構役に立っています.
# マッチマージ用
# 入力; data2 :[file2]
# 大きい(削除対象のある)方のデータ2を適宜指定する
# data1 :[filename]
# 両者ともマッチマージ用識別変数(ID)でソートされていなければならない
# data1 にあるIDが data2 に存在しないとエラーになる.すなわち,
# data1 は data2 の部分集合でなければならない.
# jgawk -f m_merge.awk [file2] [filename]
BEGIN {
FS="," # CSVデータ用
file2 = ARGV[1]
split(ARGV[2], f, ".")
outfile1 = f[1]".MRG" # マッチ分 出力ファイル
outfile2 = f[1]".NMG" # 非マッチ分出力ファイル
delete ARGV[1]
}
{
data1 = $0
by1 = $2"" # マッチマージ用変数を指定
nr = NR
while (gl = getline < file2 > 0) {
++i
data2 = $0
by2 = $2"" # マッチマージ用変数を指定
if (by1 == by2) {
print data1","data2 > outfile1
break
}
else print data2 > outfile2
}
printf("%d,",i)
if (gl == 0) {
err_m = "ERROR! No." nr " (ID = " by1 ") in the "\
ARGV[2] " does not appear in the " file2
err_m2 = "ERROR! No." nr " (ID = " by1 ") in the "\
ARGV[2] " このIDは次のファイルにありません." file2
print ""
print err_m
print err_m2
exit
}
}
END { print "\n" "END" }
JGAWKホームページに戻る