我正在尝试根据导入的 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) 我想要一个关联数组在我的 bashrc 文件中,我想在需要时添加或删除它,但是如果我将数组声明放在 bashrc 文件中,它会在每次 bash 运行时重新声明,因此以前的值将丢失. 我该怎么办?
我需要将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 中玩了一下关联数组,在使用和不使用 声明完全相同的关联数组时发现了以下差异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) 我有很多关联数组,但我只想使用 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) 希望比较具有相同格式的两个输入文件的第一列。格式如下所示:
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)