我有两个文件,我想将 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 或任何其他 shell 命令来实现上述要求。(它必须至少生成 10000 个文件,并且应该在最多 10 分钟内完成生成文件。)
第一次尝试
如果我已经执行了下面的命令,它几乎达到但不完全满足要求。
awk 'NR==FNR{a[$1];next}{split($4,b,"\"")}(b[2] in a){print $2"\n"$10"\n=========\n" > b[2]".txt"}' file2 file1
来自文件之一的输出
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/*
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="/*
=========
TIMESTAMP="2013-08-26T19:57:34"
SQLTEXT="SHOW
但我想要如下所示的输出
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 "
意味着在这里我需要将文件 1 的分隔符指定为 '"',而文件 2 没有分隔符 ..
有人可以帮忙吗?