2 つのファイルがあり、file1 を file2 の行数と等しい数の部分に分割したいと考えています。
ここでは、file2 の各行が file1 と比較され、file1 の一致したすべてのレコードが新しいファイルとして形成されます。
ファイル1
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974096" STATUS="0" SQLTEXT="SHOW COLLATION"/>
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974099" STATUS="0" SQLTEXT="SHOW TABLES"/>
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974095" STATUS="0" SQLTEXT="SHOW COLLATION"/>
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974094" STATUS="0" SQLTEXT="SHOW COLLATION"/>
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974099" STATUS="0" SQLTEXT="SHOW COLLATION"/>
<AUDIT_RECORD TIMESTAMP="2013-08-26T19:31:17" NAME="Query" CONNECTION_ID="21974094" STATUS="0" SQLTEXT="SET NAMES utf8"/>
ファイル2
21974096
21974100
21974095
21974094
21974099
必要な出力:
21974094.txt
==========================================
TIMESTAMP="2013-08-26T19:31:17"
SQLTEXT="SET NAMES utf8"
==========================================
TIMESTAMP="2013-08-26T19:31:17"
SQLTEXT="SHOW COLLATION"
21974099.txt
==========================================
TIMESTAMP="2013-08-26T19:31:17"
SQLTEXT="SHOW COLLATION"
==========================================
TIMESTAMP="2013-08-26T19:31:17"
SQLTEXT="SHOW TABLES"
21974095.txt
==========================================
TIMESTAMP="2013-08-26T19:31:17"
SQLTEXT="SHOW COLLATION"
...
awk でこれを実現するために、以下のようなコードを書きましたが、要件を満たしていません。
awk 'NR==FNR{a[$4];next}!($4 in a){ print $2 "\n" $6 "\n=========\n" > $4 ".txt"}' file2 file1
awkまたはその他のシェルコマンドを使用して上記の要件を達成する方法を教えてください。(最低 10000 個のファイルを生成する必要があり、最大 10 分でファイルの生成を完了する必要があります。)
1 回目の試行
以下のコマンドを実行した場合、ほぼ到達していますが、要件を完全には満たしていません。
awk 'NR==FNR{a[$1];next}{split($4,b,"\"")}(b[2] in a){print $2"\n"$10"\n=========\n" > b[2]".txt"}' file2 file1
ファイルの1つからの出力
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/*
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/*
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="SHOW
しかし、私は以下のようなOUTPUTが欲しい
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/*show variables"
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/* select * from table "
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="SHOW collations "
ここでは、file1 のみの区切り文字を '"' として指定し、file2 の区切り文字を指定しない必要があることを意味します。
これに関して誰でも助けることができますか?