#!/usr/bin/env bash
b=$(awk -F "[|]" '{print $1}' test.txt)
days=$(awk -F "[{}]" '{print $1}' test.txt) #days
time=$(awk -F "[{}]" '{print $2}' test.txt) #time
#count=`echo $d | wc -l`
#echo $count
declare -A arr
for i in $days;do
echo $i
for j in $time;
echo $j
done
done
测试.txt:
azureuser@disk-bkp:~$ cat test.txt
Mo Tu We Th Fr {19:00 18:00 16:00 19:00 19:00}
下面是上面代码的输出:
Mo
19:00
18:00
16:00
19:00
19:00
Tu
19:00
18:00
16:00
19:00
19:00
We
19:00
18:00
16:00
19:00
19:00
Th
19:00
18:00
16:00
19:00
19:00
Fr
19:00
18:00
16:00
19:00
19:00
预期输出为:
Mo
19:00
Tu
18:00
We
16:00
Th
19:00
Fr
19:00
我想根据上述列表创建一个键/值对,并且我需要获取价值基于钥匙.
$days
输出为Mo Tu We Th Fr
并且$time
为19:00 23:00 16:00 23:00 15:00
. 预期输出为周一:19:00 周二:23:00 周三:16:00 周四:23:00 周五:15:00
答案1
如果您想使用 awk 来设置键/值数组,您需要将输入文件更改为:
Mo 19:00
Tu 18:00
We 16:00
Th 19:00
Fr 19:00
然后
awk '{a[$1]=$2} END {for (i in a) print i, a[i]}' test.txt
Tu 18:00
We 16:00
Fr 19:00
Mo 19:00
Th 19:00
a[] 是您想要的键/值数组。但如您所见,顺序已被 awk 更改。为了防止这种情况,我们进一步将您的输入文件更改为:
1Mo 19:00
2Tu 18:00
3We 16:00
4Th 19:00
5Fr 19:00
所以我们稍后可以使用第一列恢复顺序。然后
awk '{a[$1]=$2} END {for (i in a) print i, a[i]}' test.txt | sort -k1 | cut -c 2- | tr '\n' ' '
这给出了你想要的输出:
Mo 19:00 Tu 18:00 We 16:00 Th 19:00 Fr 19:00
但请注意,数组 a[] 中的键现在包含您可能不想要的附加列。