У меня есть файл сопоставлений, как показано ниже:
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. Как я могу сделать это в сценарии оболочки? Это возможно сделать?
Кроме того, если нет никакой разницы, просто создайте пустой массив и зарегистрируйте сообщение.
Обновление:
Для 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