标签: associative-array

从两个命令的输出创建关联数组

我正在尝试根据导入的 passwd 文件创建用户目录,并尝试将数据加载到关联数组中: array[username]=directory 。我可以将字段加载到一个单独的数组中,但我无法获得正确的关联,因为每个字段都与所有目录相关联。

USERLIST=$(cat /usrmkr/in.out | awk -F ":" '{print $1}')
DIRLIST=$(cat /usrmkr/in.out | awk -F ":" '{print $6}')
declare -A USERARRAY

func_StoreData()
{
    USERARRAY[$1]="$2"
    return $?
}

for ((u=0;u<${USERLIST[@]};u++)); do
    func_StoreData ${USERLIST[$u]} ${DIRLIST[$u]}
done

for i in ${!USERARRAY[@]}; do
    echo "making directory for $i in ${USERARRAY[$i]}"
    #Do stuff
done
Run Code Online (Sandbox Code Playgroud)

bash shell-script associative-array

2
推荐指数
1
解决办法
8329
查看次数

在 bash 中创建持久数组

我想要一个关联数组在我的 bashrc 文件中,我想在需要时添加或删除它,但是如果我将数组声明放在 bashrc 文件中,它会在每次 bash 运行时重新声明,因此以前的值将丢失. 我该怎么办?

bash shell-script associative-array

2
推荐指数
1
解决办法
184
查看次数

如何将2个数组合并为一个关联数组

我需要将ARRAY1和组合ARRAY2成一个关联数组,如ARRAY. 我正在使用此代码:

 mapfile -t ARRAY1 < <(/bin/awk '{ print $ 1 }' /output/gen_branch)
 mapfile -t ARRAY2 < <(/bin/awk '{ print $ 6 }' /output/gen_code )
 declare -A ARRAY

 for ((i=0; $i<${#ARRAY1[@]}; i++))
 do
 ARRAY+=( ["${ARRAY1[i]}"] = "${ARRAY2[i]}" )
 done

 ##added this loop to check output
 for value in "${!ARRAY[@]}"
 do
 echo "branch: $value"
 echo "code: ${ARRAY[$value]}"
 done 
Run Code Online (Sandbox Code Playgroud)

我希望这样的事情在bash的其他部分使用它们(即价值是很重要的第一个元素ARRAY1第一元素ARRAY2等):

ARRAY1=( b1 b2 b3 )
ARRAY2=( c1 c2 …
Run Code Online (Sandbox Code Playgroud)

bash array shell-script merge associative-array

2
推荐指数
1
解决办法
2354
查看次数

Bash 中这两种关联数组声明有什么区别?

我在 Bash 中玩了一下关联数组,在使用和不使用 声明完全相同的关联数组时发现了以下差异declare。代码如下:

#!/usr/bin/env bash

echo -e "\n\nASSOCIATIVE ARRAY\n"
declare -A MY_MAP=( 
    [Madrid]="Spanish" 
    [London]="English" 
    [Paris]="French" 
    [1]=2
    [3]=3.14 
)
echo "First element: $MY_MAP"
echo "Whole content as single string: ${MY_MAP[*]}"
echo "Whole content quoted separately: ${MY_MAP[@]}"
echo "List of indices: ${!MY_MAP[@]}"
echo "Array length: ${#MY_MAP[*]}"
echo "Array length: ${#MY_MAP[@]}"
echo "Second element: ${MY_MAP[London]}"
echo "Last 2 elements: ${MY_MAP[@]:1:3}"

echo -e "\n\nASSOCIATIVE ARRAY - 2\n"
MY_MAP2=( 
    [Madrid]="Spanish" 
    [London]="English" 
    [Paris]="French" 
    [1]=2
    [3]=3.14 
)
echo "First element: $MY_MAP2"
echo "Whole content …
Run Code Online (Sandbox Code Playgroud)

shell bash array shell-script associative-array

2
推荐指数
1
解决办法
532
查看次数

bash循环关联数组与变量数组名称

我有很多关联数组,但我只想使用 1 个循环。按给定名称选择 for 循环数组

我想用变量选择/构建数组名称的一部分,然后用该名称循环,但它不起作用。

与 OUTPUT3 和 OUTPUT4 类似,但语法错误。

对于输出 3,我收到:“bash 错误替换”

对于输出 4,我收到:“仅数组名和 0”

#!/bin/bash
clear

declare -A a1 a2 a3

a1['1']="1-1V"

a2['1']="2-1V"
a2['2']="2-2V"

a3['1']="3-1V"
a3['2']="3-2V"
a3['3']="3-3V"

# 1 OUTPUT WORKS
for i in ${!a1[*]}
do
echo -e "$i : ${a1[$i]}"
done

# 2 OUTPUT WORKS
for i in ${!a2[*]}
do
echo -e "$i : ${a2[$i]}"
done

# 3 OUTPUT - WRONG SYNTAX
selectkey="3"
for i in ${!a$selectkey[@]}
do
echo -e "$i : ${a$selectkey[$i]}"
done

# 4 …
Run Code Online (Sandbox Code Playgroud)

bash associative-array

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

AWK 比较两个文件中的第 1 列打印将列附加到输出中的第三列

希望比较具有相同格式的两个输入文件的第一列。格式如下所示:

FILE1:
0000abc5abc3 GR096
0000def5ae87 GR001
0000cab5aea3 GR001
0000bac5aeeb GR001
0000fed5af13 GR001
0000efd5b16f GR001
0000cba5b187 GR001
0000bca5b2a3 GR001

FILE2:
0000abc5abc3 GR097
0000def5ae87 GR001
0000cab5aea3 GR001
0000bac5aeeb GR001
0000fed5af13 GR123
0000cba5b187 GR169
Run Code Online (Sandbox Code Playgroud)

第 1 列包含 FILE1 和 FILE2 中的 MAC 地址。我希望 FILE1 中第 1 列的值与 FILE2 中的第 1 列进行检查,并且是否存在匹配以将 FILE1 的第 1 列和第 2 列的值以及 FILE2 中第 2 列的值输出为这种方式的第三列。

DESIRED OUTPUT:
0000abc5abc3 GR096 GR097
0000def5ae87 GR001 GR001
0000cba5b187 GR001 GR169
Run Code Online (Sandbox Code Playgroud)

每个文件包含数百万个条目。使用 while 循环在 bash 中运行输入永远缓慢且低效,因为它会循环每个条目:

while read -r mac1 code1; do …
Run Code Online (Sandbox Code Playgroud)

bash array awk shell-script associative-array

0
推荐指数
1
解决办法
5104
查看次数

标签 统计

associative-array ×6

bash ×6

shell-script ×5

array ×3

awk ×1

merge ×1

shell ×1