придумать однозначные правила преобразования типов. Как в php например.
Или вообще запретить любые преобразования, как в нормальных ЯП. IRL конечно "нормальные ЯП" со строгой типизацией значения не имеют(практического), и пользуются обычными ЯП, но нужно помнить, о том, что сладкое всё равно нет смысла сравнивать с солёным. Даже если ЯП это допускает. Сишачка/пхп допускают, и получается ерунда.
Потому и рекомендую юзать (( )), т.к. этот способ ГАРАНТИРОВАННО интерпретирует значение В ЧИСЛО, а не в хрен знает что.
ЗЫЖ кстати ТС не написал, какой он смысл вкладывает в элементы массивов. И т.к. в bash имеется всего два типа, то для ТСа есть два решения. ЛИБО одно, ЛИБО второе. Но не оба сразу. Потому-как переменная не может быть числом и строкой одновременно. Возможна только разная интерпретация.
а вот для большинства сортировок в шелах и прочих лс наоборот (тока не надо учить всевозможным ls -v и прочим sort -n, они в самый раз делают почти то, что выше названо "код должен...")
(о неопределенности)
что это за список, и с какого перепугу третью строчку надо заменить на первую? А что делать с остальными?
"smaharbA" написал:
тока не надо учить
а я и не буду. Вы необучаемы. Вам видимо не дано понять, что "строка" и "число", разные вещи. И что сортировки тоже разные бывают, одни строчки сортируют, другие числа, а третьи ещё что-то.
for ((k=0; k < 5 ; k++))
do
for ((n=0; n < 10 ; n++))
do
if [ ${a[$k]} -ne ${b[$n]} ]
then
echo "${a[$k]} ${b[$n]}" >> noteq_file
else
echo "${a[$k]} ${b[$n]}" >> eq_file
fi
done
done
drBatty написал:
[quote="Vascom"]if [ ${a[$k]} -ne ${b[$n]} ]
правильнее
text
if [ "${a[$k]}" != "${b[$n]}" ]
[/quote]
это не совсем правильно, так как во втором файле я получаю вместо 8 результатов (несовпавших цифр) 48 результатов (задвоенных)
[quote="prostornet"]Подскажите пожалуйста как сравнить два массива и вывести совподающие элементы в один файл, а отличающиеся в другой.
в баше это через задницу. Вам точно нужно именно массивы, или пойдут строки в файле? Это задачка от HR (экзамен, с другом поспорили)?[/quote]
Нет это не задачка и не спор, посути это лень, я не хочу вводит пару команд и потом всматриваться в результаты и выискивать нужное. Хочется нажать кнопку [сделать красиво] и получить результат.
Вот именно это у меня и не получается, такой задвоенный вывод я и до этого получал.
А задачу я вроде с самого начала описал. Есть два массива с цифрами, сравниваем, в один файл цифры совпашие, а в другой те что не совпали, но все в единичном экземпляре.
P.S.: без повторений как в цикле for for if и во втором файле получаем вывод: 1 3 4 5 6 7 8 9 10 (совпала 2 её не вывели) 1 2 4 5 6 7 8 9 10 (совпала 3 её не вывели) и т.д.
А задачу я вроде с самого начала описал. Есть два массива с цифрами, сравниваем, в один файл цифры совпашие, а в другой те что не совпали, но все в единичном экземпляре.
Я не против пяти баксов, но такое решение (вывод только совпавших цифр в массиве A и B) у меня было готово сразу (только без вывода индекса ), о чем я уже писал.
А вот вывод несовпавших цифр (1 4 5 6 7 8 10) это как?
Если в Ваш скрипт добавить строки:
text
else
echo ${B[$INDEX_B]}
вот тут получается множественный вывод несовпавших цифр.
У меня был вопрос возможно ли это решить без sort и uniq, с помощью циклов?
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)
INDEX_B=0
for (( i=1; i<=254 ; i++ )); do
if (( ${A[$INDEX_B]} != ${i} ));then
echo -e ${BLUBG}${i}${NC}
else
INDEX_B=$(($INDEX_B+1))
fi
done
echo -e "Номеров в массиве А и В: ${RED} ${MAX_INDEX_A} ${NC}."
echo -e "Номеров только в массиве В: ${BLUBG} `expr 254 - ${MAX_INDEX_A}` ${NC}."