小编Hat*_*ess的帖子

Bash:检查关联数组中是否存在键

目标:

我想做的就是检查关联数组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 条件。

arrays bash associative-array

5
推荐指数
1
解决办法
4796
查看次数

Shell格式和替换任务

我想使用 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)

正如您在上面看到的,我们需要:

  1. 字符“:”后面的单词小写;
  2. 在上面这些单词之间添加逗号;
  3. 将它们放在括号之间 [...]

顶部樱桃是除最后一行之外每行末尾的逗号。

bash sed

4
推荐指数
2
解决办法
145
查看次数

使用 awk 合并文件

我试图合并file1file2基于 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)

awk

3
推荐指数
1
解决办法
63
查看次数

标签 统计

bash ×2

arrays ×1

associative-array ×1

awk ×1

sed ×1