我有一个下面的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
请建议。
答案 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