gpt4 book ai didi

bash - 在 AWK 命令中初始化一个数组,并使用该数组使用 AWK 进行打印

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

我正在尝试比较 2 个文件数据并打印出其中的某些内容。

我的主要目标是在同一个 awk 语句中初始化一个包含一些值的数组,并将其用于某些打印目的。

下面是我正在使用的命令,我觉得它看起来像一些语法错误。

请在 AWK 部分帮助我如何定义数组以及如何在其中使用它。

命令已尝试 -

paste -d "|" filedata.txt tabdata.txt | awk -F '|' '{array=("RE_LOG_ID" "FILE_RUN_ID" "FH_RECORDTYPE" "FILECATEGORY")}' '{c=NF/2;for(i=1;i<=c;i++)if($i!=$(i+c))printf "%s|%s|%s|%s\n",$1,${array[i]},$i,$(i+c)}'

示例输入文件

文件数据.txt

A|1|2|3
B|2|3|4

tabdata.txt

A|1|4|3
B|2|3|7

所以我想要的输出是 . -

A|FH_RECORDTYPE|2|4
B|FILECATEGORY|4|7

输出包含差异 -

PRIMARYKEY|COLUMNNAME|FILE1DATA|FILE2DATA

我希望数组在 AWK 中初始化为 array=("RE_LOG_ID""FILE_RUN_ID""FH_RECORDTYPE""FILECATEGORY") 并将对应的列名

从数组条件中获取列名的时间是 ($i!=$(i+c)),无论第“i”个位置不匹配,我将从数组中打印第“i”个元素。

如果我从我的命令中删除数组部分,“查找差异”部分工作完美,但我的问题是我想初始化一个包含列名的数组并在 awk 语句中也打印它。

只是我需要帮助如何将数组部分合并到 AWK 中。

最佳答案

不幸的是,AWK 中的数组无法按您预期的方式分配。作为替代方案,您可以使用 split 函数,例如:

split("RE_LOG_ID FILE_RUN_ID FH_RECORDTYPE FILECATEGORY", array, " ")

(可选的“”是必需的,因为FS被覆盖了。)
然后您的命令将如下所示:

paste -d "|" filedata.txt tabdata.txt | awk -F '|' '
BEGIN {split("RE_LOG_ID FILE_RUN_ID FH_RECORDTYPE FILECATEGORY", array, " ")}
{
c= NF/2;
for(i=1; i<=c; i++)
if ($i != $(i+c))
printf "%s|%s|%s|%s\n", $1, array[i], $i, $(i+c);
}'

关于bash - 在 AWK 命令中初始化一个数组,并使用该数组使用 AWK 进行打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48699844/

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