【发布时间】:2018-10-12 03:11:43
【问题描述】:
我有如下所示的映射文件:
new_primary_mapping.txt
{1=[343, 0, 686, 1372, 882, 196], 2=[687, 1, 1373, 883, 197, 736, 1030, 1569], 3=[1374, 2, 884, 737, 198, 1570]}
new_secondary_mapping.txt
{1=[1152, 816, 1488, 336, 1008], 2=[1153, 0, 817, 337, 1489, 1009, 1297], 3=[1, 1154, 1490, 338]}
在上述映射文件中,每个clientId 都有新的主映射和新的辅助映射。例如:clientId 1 具有 343, 0, 686, 1372, 882, 196 新的主映射和 1152, 816, 1488, 336, 1008 新的辅助映射。其他clientIds 也是如此。下面是我的脚本,它为每个 clientId 打印数组:
#!/bin/bash
mapfiles=(new_primary_mapping.txt new_secondary_mapping.txt)
declare -a arr
mappingsByClientID () {
id=$1 # 1 to 5
file=${mapfiles[$2]} # 0 to 1
arr=($(sed -r "s/.*\b${id}=\[([^]\]+).*/\1/; s/,/ /g" $file))
echo "${arr[@]}"
}
# assign output of function to an array
# and get mapping for clientId 3
pri=($(mappingsByClientID 3 0))
snd=($(mappingsByClientID 3 1))
# print whole array
echo "whole arr pri: ${pri[@]}"
echo "whole arr snd: ${snd[@]}"
现在我有另外两个文件,如下所示,它们具有相同 clientId's 的旧映射。
old_primary_mapping.txt
{1=[686, 1372, 882, 196], 2=[883, 197, 736, 1030, 1569], 3=[1374, 2, 884, 737]}
old_secondary_mapping.txt
{1=[1488, 336, 1008], 2=[817, 337, 1489, 1009, 1297], 3=[1490, 338]}
问题陈述
现在我需要阅读所有四个文件,对于每个clientId,我需要找出新映射和旧映射之间不常见的地方(含义差异)。
例如:clientId 1 具有 343, 0, 686, 1372, 882, 196 新的主映射和 1152, 816, 1488, 336, 1008 新的辅助映射。
还有clientId 1 有686, 1372, 882, 196 旧的主映射和1488, 336, 1008 旧的辅助映射。
所以我将创建一个包含以下条目的 pri 数组:343 0 和将包含以下条目的 sec 数组:1152 816。因为这些是每个 clientId 的新旧映射之间的区别。我怎样才能在 shell 脚本中做到这一点?这可以吗?
此外,如果没有区别,则只需创建一个空数组并记录一条消息。
更新:
对于clientId 1,它应该打印:
pri=(343 0)
snd=(1152 816)
对于clientId 2:
pri=(687 1 1373)
snd=(1153 0)
对于clientId 3:
pri=(198 1570)
snd=(1 1154)
注意:只要数字相同,就可以匹配。数字的顺序无关紧要。所以我需要找到每个 clientId 不常见的那些数字。
这是我删除文件的方式,但是当我运行它时,它给了我错误:
for dir_name, numbers in (('primary', pri), ('secondary', snd)):
for number in numbers:
for filename in glob.glob('/{}/proc_{}_for_*.log'.format(dir_name, number)):
os.unlink(filename)
这是我得到的错误:
NameError: name 'pri' is not defined
【问题讨论】:
-
问题:1) 你能认为数组一直在增长吗?这是否意味着新数组中的信息会比旧数组中的更多? 2) 数组总是以新旧相同的顺序生成吗?
-
新数组的大小将始终小于每个 clientId 的旧数组。在示例中,我有相反的情况。只是想在示例中说明清楚,所以我想出了这个。没有按照你的第二个问题回答?
-
示例
old_primary1=[686, 1372, 882, 196]和new_primary1=[343, 0, 196, 882, 1372, 686] -
@Allan 它可以是任何顺序。我猜一定有办法找到两个数组之间的差异?
-
@RomanPerekhrest 为什么你不认为这是一个区别?
new_primary1=[343, 0, 686, 1372, 882, 196]和old_primary1=[686, 1372, 882, 196]。这里的区别只是343 0对主要的,因为其他数字是匹配的?
标签: python linux bash shell sed