简述:
有人知道如何将文件名和文件内容传递给awk吗?并使它运行所有目录中的文件,并将这些操作的输出附加到1个最终文件中吗?
详述:
每周我需要基于2个变量生成一个SQL更新文件,以前我经常复制粘贴很多内容到CSV文件中才能实现这个awk命令。我的设置如下:
一个非常长的手动拼接的CSV,第一行看起来像这样:
3afb6dad-352d-4c2a-b348-40fdb3c3d9a6;019f08dd-5017-43a1-b65b-c77cb90068ab
一个遍历 CSV 的 AWK 命令:
cat list.csv | awk -F\; '{print "update db01.CONTENT set locationid = \"" $1 "\" where cdbid = \"" $2 "\";";'}
我希望自动化这一过程,通过自动生成CSV文件甚至更好的方式是直接将正确的变量传递给脚本。
我有几个输入文件。在我的awk命令中,文件的标题必须为
$1
,并且是不变的。文件本身包含数量可变的UUIDs,需要是$2
。
输入
我有一个名为3afb6dad-352d-4c2a-b348-40fdb3c3d9a6
的文件。该文件的内容如下所示:019f08dd-5017-43a1-b65b-c77cb90068ab
0479c914-6988-4038-ac74-f5b4adb123d0
05a6b05a-dff9-4f7c-8a7e-92c8651b8cde
05ad4a6a-e2c6-4074-adfd-0899c15a3600
204b12af-42d8-48a0-83c6-10e02a051ed5
20c4fb93-6ed2-4dee-87da-749b52c76d74
27b2552a-1050-47fb-96fe-714b4231a067
343f34be-b1cf-4cdf-8c35-344847a13837
我有另一个名为 72d799e8-ff97-4388-a498-47badd6ca7d8
的文件,其中包含类似于以下内容:
54b0623f-b5f0-47a1-bf90-9c8cb2054676
8056e400-b809-4e08-bf0a-d5370f3e1b44
期望的输出
我需要得到一个包含以下内容的.sql文件:
update db01.CONTENT set locationid="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid ="019f08dd-5017-43a1-b65b-c77cb90068ab";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="0479c914-6988-4038-ac74-f5b4adb123d0";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="05a6b05a-dff9-4f7c-8a7e-92c8651b8cde";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="05ad4a6a-e2c6-4074-adfd-0899c15a3600";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="204b12af-42d8-48a0-83c6-10e02a051ed5";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="20c4fb93-6ed2-4dee-87da-749b52c76d74";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="27b2552a-1050-47fb-96fe-714b4231a067";
update db01.CONTENT set locationid ="3afb6dad-352d-4c2a-b348-40fdb3c3d9a6" where cdbid="343f34be-b1cf-4cdf-8c35-344847a13837";
update db01.CONTENT set locationid ="72d799e8-ff97-4388-a498-47badd6ca7d8" where cdbid="54b0623f-b5f0-47a1-bf90-9c8cb2054676";
update db01.CONTENT set locationid ="72d799e8-ff97-4388-a498-47badd6ca7d8" where cdbid="8056e400-b809-4e08-bf0a-d5370f3e1b44";
我尝试了一些方法来组合
for file in ./output/*;
do
echo ${file##*/}
done
并且
while IFS='' read -r line || [[ -n "$line"]];
do
#awk stuff
done <"$1"
但是我没有得到任何结果。非常感谢帮助!