AWK分割文件

时间:2018-01-29 10:51:23

标签: shell awk sed

我有一个下面的awk命令正在调查" test.sql" file(有多个CREATE TABLE语句),我想根据每个CREATE TABLE语句生成多个文件。我可以通过以下命令实现这一目标。

但是生成的当前文件名如下: F1.sql F2.sql ...

awk  '/CREATE TABLE/{x="F"++i".sql";}{print > x;}' test.sql

所以我没有给F1.sql或F2.sql,而是想替换变容器" F"有一些shell保持变量。

当前OutPut是: F1.sql F2.sql

预期输出 Declred变量F =" test"

输出: test1.sql test2.sql

请建议。

1 个答案:

答案 0 :(得分:1)

您只是错误地使用从shell导入的awk变量。 不能在引号内,在引号下它被解释为文字字符串。

F="test"
awk -v fname="$F" '/CREATE TABLE/{x=fname""++i".sql";}{print > x;}' test.sql

此外,您可以使用明确的print > x调用关闭作为close()一部分打开的文件描述符,即

awk -v fname="$F" '/CREATE TABLE/{x=fname""++i".sql";}{print > x; close(x)}' test.sql