gpt4 book ai didi

bash - 如何将文件名和文件内容传递给awk

转载 作者:行者123 更新时间:2023-11-29 09:29:25 25 4
gpt4 key购买 nike

tl;dr

有谁知道如何将文件名和文件的其余内容传递给 awk?并使其遍历目录中的所有文件并将这些操作的输出附加到 1 个最终文件?

长话短说:

我需要每周根据 2 个变量生成一个 SQL 更新文件,并且我过去常常将大量内容复制粘贴到一个 CSV 文件中,以使这个 awk 命令运行。我的设置是这样的:

一个很长的手动粘贴在一起的 CSV,第 1 行看起来像这样:

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 并且是不变的。文件本身包含可变数量的 UUID,需要为 $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"

但是我得不到任何结果。感谢所有帮助!

最佳答案

awk 助您一臂之力!

基于你的输入/输出文件格式

$ awk '{file=FILENAME; sub(".*/", "", file);
print "update db01.CONTENT set locationid=\"" file
"\" where cdbid=\"" $1 "\""}' output/*

关于bash - 如何将文件名和文件内容传递给awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46891182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com