目标:
我想做的就是检查关联数组USER_PARAMETERS_KEYs[j]中是否存在a RPM_PARAMETERS_HASH
。我有一个数组和一个关联数组,如下所示:
预定义:
declare -a USER_PARAMETERS_KEYS='([0]="userField" [1]="fUserField" [2]="srcIPField" [3]="srcPortField" [4]="dstIPField" [5]="dstPortField" [6]="dateField" [7]="timeField")'
declare -A RPM_PARAMETERS_HASH='([timeField]="Time" [userField]="User-Name" [dstIPField]="" [srcIPField]="Source-IP-Address" [dstPortField]="Target-UDP-Port" [fUserField]="Full-Name" [dateField]="Date" [srcPortField]="Source-UDP-Port" )'
Run Code Online (Sandbox Code Playgroud)
我实施了以下措施:
if [[ ${RPM_PARAMETERS_HASH[${USER_PARAMETERS_KEYS[j]}]} ]] ; then
Run Code Online (Sandbox Code Playgroud)
问题
我的问题是当${USER_PARAMETERS_KEYS[j]}变得等于时dstIPField,因为它在关联数组中有一个空字符串值,所以尽管键在那里,但不满足 if 条件。
我想使用 bash 脚本语言对结构化文本进行操作。然而,我的知识使这项任务非常具有挑战性。
输入样本:
"4-QUEIJOS": Mucarela Provolone Catupiry Ricota Oregano
"A-MODA": Mucarela Presunto Calabresa Bacon Tomate Milho Oregano
"ALHO-E-OLEO": Mucarela Alho oleo Oregano
"PEITO-DE-PERU-ESPECIAL": Mucarela Peito-de-Peru Catupiry Oregano
Run Code Online (Sandbox Code Playgroud)
输出样本
"4-QUEIJOS": ["mucarela", "provolone", "catupiry", "ricota", "oregano"],
"A-MODA": ["mucarela", "presunto", "calabresa", "bacon", "tomate", "milho", "oregano"],
"ALHO-E-OLEO": ["mucarela", "alho", "oleo", "oregano"],
"PEITO-DE-PERU-ESPECIAL": ["Mucarela", "peito-de-peru", "catupiry", "oregano"]
Run Code Online (Sandbox Code Playgroud)
正如您在上面看到的,我们需要:
顶部樱桃是除最后一行之外每行末尾的逗号。
我试图合并file1并file2基于 column2 from 中file2的数字和 column1 from 中的数字file1主要由逗号分隔。.我试图匹配的数字之间也有一个分隔符file2
这是文件 1。
1,Mary,24 Fuller Rd
2,Fred,19 St Johns
3,Jonathan,8 Poplar Drive
4,Susan,116 Shepherds Way
5,Michael,4 Nerthern Court
Run Code Online (Sandbox Code Playgroud)
和文件 2
Dawning,Order.5.DHL
Hawkins,Order.3.FedEx
Jacob,Order.2.Yodel
Plateu,Order.4.DPD
Martins,Order.1.Hermes
Run Code Online (Sandbox Code Playgroud)
我的方法是从file2with 中提取密钥split。作为单个文件,这是可行的,但是当处理多个文件时,行为很奇怪,而不是预期的结果。
awk -F, '{{split($2,i,".")}{ print i[2]}' file2
5
3
2
4
1
Run Code Online (Sandbox Code Playgroud)
awk -F, 'NR==FNR{split($2,i,"."); next}{ print i[2]}' file2 file1
1
1
1
1
1
Run Code Online (Sandbox Code Playgroud)
如果我删除split但无法提取匹配,我只会得到预期的结果。
awk -F, 'NR==FNR{array[$2]}END{ for (i …Run Code Online (Sandbox Code Playgroud)