LinuxForum.Fans
Тема

[Решено]сравнение массивов

Автор: prostornet 44 сообщений 8980 просмотров
#372784

Или вот вариант с двумя массивами

text

#!/bin/bash

A=(2 10 11 54 69 101 155 156 199 202)

RED='\033[31m' BLUBG='\033[44m' NC='\033[0m'

MAX_INDEX_A=${#A[@]}

for (( INDEX_A=0; INDEX_A<=MAX_INDEX_A; INDEX_A++ )); do echo -e ${RED}${A[INDEX_A]}${NC} done

for (( INDEX_A=${MAX_INDEX_A}; INDEX_A<=253; INDEX_A++ )); do A[$INDEX_A]=0 done

# массив B, числа от 1 до 254 for (( i=1; i<=254; i++ )); do B[$INDEX_B]="$i" INDEX_B=$(($INDEX_B+1)) done

MAX_INDEX_B=`expr ${#B[@]} - 1`

INDEX_A=0 for (( INDEX_B=0; INDEX_B<=MAX_INDEX_B; INDEX_B++ )); do if (( ${A[$INDEX_A]} != ${B[$INDEX_B]} ));then echo -e ${BLUBG}${B[$INDEX_B]}${NC} else INDEX_A=$(($INDEX_A+1)) fi done

echo -e "Номеров в массиве А и В: ${RED} ${MAX_INDEX_A} ${NC}." echo -e "Номеров только в массиве В: ${BLUBG} `expr 254 - ${MAX_INDEX_A}` ${NC}."

exit 0

#372791

Массивы я беру из файлов (FILE_A и FILE_B):

text

while read LINE_A; do
         A[$INDEX_A]=${LINE_A}
         INDEX_A=$(($INDEX_A+1))
done < ${FILE_A}

while read LINE_B; do B[$INDEX_B]=${LINE_B} INDEX_B=$(($INDEX_B+1)) done < ${FILE_B}

#372793
"prostornet" написал:
INDEX_B=$(($INDEX_B+1))

просто

text
(( INDEX_B++ ))
"prostornet" написал:
MAX_INDEX_B=`expr ${#B[@]} - 1`
text
(( MAX_INDEX_B = ${#B[@]} - 1 ))

а ещё проще чуть ниже исправить <= на < (в заголовке цикла).

"prostornet" написал:
Массивы я беру из файлов (FILE_A и FILE_B):

1. ну можно было их не брать, а прямо так обработать, в файлах. Ну ладно, это на потом.

2. временные файлы лучше так делать

text
TMP_FILE=$(mktemp)

создаётся временный файл в /tmp/, его потом надо удалить.

#372856

Спасибо за науку, на будущее учту.

Войдите или зарегистрируйтесь, чтобы ответить.