<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Linux Forum &mdash; [Решено]сравнение массивов]]></title>
		<link>https://linuxforum.ru/viewtopic.php?id=34216</link>
		<atom:link href="https://linuxforum.ru/extern.php?action=feed&amp;tid=34216&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «[Решено]сравнение массивов».]]></description>
		<lastBuildDate>Mon, 17 Mar 2014 17:48:30 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=401067#p401067</link>
			<description><![CDATA[<p>Спасибо за науку, на будущее учту.</p>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 17:48:30 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=401067#p401067</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400970#p400970</link>
			<description><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>INDEX_B=$(($INDEX_B+1))</p></blockquote></div><p>просто<br /></p><div class="codebox"><pre><code>(( INDEX_B++ ))</code></pre></div><div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>MAX_INDEX_B=`expr ${#B[@]} - 1`</p></blockquote></div><div class="codebox"><pre><code>(( MAX_INDEX_B = ${#B[@]} - 1 ))</code></pre></div><p>а ещё проще чуть ниже исправить &lt;= на &lt; (в заголовке цикла).</p><div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>Массивы я беру из файлов (FILE_A и FILE_B):</p></blockquote></div><p>1. ну можно было их не брать, а прямо так обработать, в файлах. Ну ладно, это на потом.</p><p>2. временные файлы лучше так делать<br /></p><div class="codebox"><pre><code>TMP_FILE=$(mktemp)</code></pre></div><p>создаётся временный файл в /tmp/, его потом надо удалить.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 14:04:29 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400970#p400970</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400968#p400968</link>
			<description><![CDATA[<p>Массивы я беру из файлов (FILE_A и FILE_B):</p><div class="codebox"><pre><code>while read LINE_A; do
         A[$INDEX_A]=${LINE_A}
         INDEX_A=$(($INDEX_A+1))
done &lt; ${FILE_A}

while read LINE_B; do
         B[$INDEX_B]=${LINE_B}
         INDEX_B=$(($INDEX_B+1))
done &lt; ${FILE_B}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 13:42:43 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400968#p400968</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400961#p400961</link>
			<description><![CDATA[<p>Или вот вариант с двумя массивами<br /></p><div class="codebox"><pre><code>#!/bin/bash

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

RED=&#039;\033[31m&#039;
BLUBG=&#039;\033[44m&#039;
NC=&#039;\033[0m&#039;

MAX_INDEX_A=${#A[@]}

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

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

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

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

INDEX_A=0
for (( INDEX_B=0; INDEX_B&lt;=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 &quot;Номеров в массиве А и В: ${RED} ${MAX_INDEX_A} ${NC}.&quot;
echo -e &quot;Номеров только в массиве В: ${BLUBG} `expr 254 - ${MAX_INDEX_A}` ${NC}.&quot;

exit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 13:05:37 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400961#p400961</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400958#p400958</link>
			<description><![CDATA[<p>Пардон, был не прав. Стоило сразу переписать...</p><div class="codebox"><pre><code>#!/bin/bash

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


RED=&#039;\033[31m&#039;
BLUBG=&#039;\033[44m&#039;
NC=&#039;\033[0m&#039;

MAX_INDEX_A=${#A[@]}

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

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

# Вместо массива B, использовал перебор цифр (в данном примере от 1 до 254)
INDEX_B=0
for (( i=1; i&lt;=254 ; i++ )); do
    if (( ${A[$INDEX_B]} != ${i} ));then
        echo -e ${BLUBG}${i}${NC}
    else
        INDEX_B=$(($INDEX_B+1))
    fi
done

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

exit 0</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 12:46:59 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400958#p400958</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400953#p400953</link>
			<description><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>Вывод все равно не дает желаемого результата.</p></blockquote></div><p>что вам не нравится-то?</p><p>PS: ЯННП в вашем скрипт. Может вы его перепишете по-человечески? Это нормально, все так делают.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 12:27:14 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400953#p400953</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400922#p400922</link>
			<description><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p>можно. Просто в нормальной жизни массивы просто так из ниоткуда не появляются как у вас.</p></blockquote></div><p>Вывод все равно не дает желаемого результата.</p><br /><p>Хотел вот что (напримере вывода команды nmap -sP), показать все занятые и все свободные адреса)<br />./test.sh 192.168.1&nbsp; :</p><div class="codebox"><pre><code>#!/bin/bash

NET=$1

RED=&#039;\033[31m&#039;
BLUBG=&#039;\033[44m&#039;
NC=&#039;\033[0m&#039;

TMP1=/tmp/ipchk1.tmp
TMP2=/tmp/ipchk2.tmp

rm -f ${TMP1}
rm -f ${TMP2}


/usr/bin/nmap -sP ${NET}.0/24 | sed -rn &#039;s/.*[^0-9](([0-9]+\.){3})([0-9]+).*/\3/p&#039; &gt; ${TMP1}

b_ip=0
while read line; do
    array[$b_ip]=&quot;$line&quot;
    b_ip=$(($b_ip+1))
    echo -e ${NET}.${RED}${line}${NC}
done &lt; ${TMP1}

max_b=${#array[@]}
for (( ip=${max_b}; ip&lt;=253; ip++ )); do
    array[$ip]=0
done

b=0
for (( i=1; i&lt;=254 ; i++ )); do
    if (( ${array[$b]} != ${i} ));then
        echo -e ${NET}.${BLUBG}${i}${NC}
    else
        b=$(($b+1))
    fi
done

echo -e &quot;В подсети ${NET}.0/24 занято: ${RED} ${max_b} ${NC} адреса(ов).&quot;
echo -e &quot;В подсети ${NET}.0/24 свободно: ${BLUBG} `expr 254 - ${max_b}` ${NC} адреса(ов).&quot;

rm -f ${TMP1}
rm -f ${TMP2}

exit 0</code></pre></div><br /><p>Можно и проще наверно все написать.</p><p>P.S.:<br />причем вот эту часть скрипта пришлось дописывать, так как вылазила ошибка из за того что&nbsp; индекс массива закончился <br /></p><div class="codebox"><pre><code>max_b=${#array[@]}
for (( ip=${max_b}; ip&lt;=253; ip++ )); do
    array[$ip]=0
done</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 11:03:00 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400922#p400922</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400897#p400897</link>
			<description><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>вот тут получается множественный вывод несовпавших цифр.</p></blockquote></div><p>тогда так:</p><div class="codebox"><pre><code>#!/bin/bash

A=(2 3 6 9)
B=(1 2 3 4 5 6 7 8 9 10)

echo &quot;A: &#039;${A[@]}&#039;, B: &#039;${B[@]}&#039;&quot;

# intersect A B

LAST_NE=&quot;-1&quot; # таких чисел не бывает

MAX_INDEX_A=${#A[@]}
MAX_INDEX_B=${#B[@]}
for (( INDEX_A = 0; INDEX_A &lt; MAX_INDEX_A; INDEX_A++ )); do
    for (( INDEX_B = 0; INDEX_B &lt; MAX_INDEX_B; INDEX_B++ )); do
        if (( ${A[$INDEX_A]} == ${B[$INDEX_B]} )); then
            echo + $INDEX_A $INDEX_B ${A[$INDEX_A]}
        else
            if (( LAST_NE != ${A[$INDEX_A]} )); then
                echo - $INDEX_A $INDEX_B ${A[$INDEX_A]} ${B[$INDEX_B]}
                LAST_NE=${A[$INDEX_A]}
            fi
        fi
    done
done</code></pre></div><div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>У меня был вопрос возможно ли это решить без sort и uniq, с помощью циклов?</p></blockquote></div><p>можно. Просто в нормальной жизни массивы просто так из ниоткуда не появляются как у вас.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 09:33:54 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400897#p400897</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400895#p400895</link>
			<description><![CDATA[<div class="quotebox"><cite>drBatty пишет:</cite><blockquote><p><strong>prostornet</strong>, вы мне надоели, с вас $5 за решение</p><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">A: &#039;2 3 6 9&#039;, B: &#039;1 2 3 4 5 6 7 8 9 10&#039;<br />0 1 2<br />1 2 3<br />2 5 6<br />3 8 9</div></p></blockquote></div><p>Я не против пяти баксов, но такое решение (вывод только совпавших цифр в массиве A и B) у меня было готово сразу (только без вывода индекса ), о чем я уже писал. <br />А вот вывод несовпавших цифр (1 4 5 6 7 8 10) это как? <br />Если в Ваш скрипт добавить строки:<br /></p><div class="codebox"><pre><code>else 
     echo ${B[$INDEX_B]}</code></pre></div><p>вот тут получается множественный вывод несовпавших цифр.<br />У меня был вопрос возможно ли это решить без sort и uniq, с помощью циклов?</p>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 09:09:51 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400895#p400895</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400894#p400894</link>
			<description><![CDATA[<p><strong>prostornet</strong>, вы мне надоели, с вас $5 за решение</p><div class="codebox"><pre><code>#!/bin/bash

A=(2 3 6 9)
B=(1 2 3 4 5 6 7 8 9 10)

echo &quot;A: &#039;${A[@]}&#039;, B: &#039;${B[@]}&#039;&quot;

# intersect A B

MAX_INDEX_A=${#A[@]}
MAX_INDEX_B=${#B[@]}
for (( INDEX_A = 0; INDEX_A &lt; MAX_INDEX_A; INDEX_A++ )); do
    for (( INDEX_B = 0; INDEX_B &lt; MAX_INDEX_B; INDEX_B++ )); do
        if (( ${A[$INDEX_A]} == ${B[$INDEX_B]} )); then
            echo $INDEX_A $INDEX_B ${A[$INDEX_A]}
        fi
    done
done</code></pre></div><p><div class="termtitle" style="font-family: sans-serif; position:relative; height:auto; width:auto; background:#3A4061; color:#FFFFFF; padding: 1px;"><b> Консоль:</b></div>
<div class="termcont" style="font-family: Terminus; position:relative; height:auto; width:auto; overflow-x:scroll; white-space: nowrap ; overflow-y:auto;background:#000000; color:#4EF44E; line-height:1.2; padding: 3px; font-size: 1rem; max-height: 60vh">A: &#039;2 3 6 9&#039;, B: &#039;1 2 3 4 5 6 7 8 9 10&#039;<br />0 1 2<br />1 2 3<br />2 5 6<br />3 8 9</div></p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 08:37:42 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400894#p400894</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400893#p400893</link>
			<description><![CDATA[<p><strong>prostornet</strong>, <br /></p><div class="codebox"><pre><code>#!/bin/bash

(( J_MAX = 5 ))

for (( J = 0; J &lt; J_MAX; J++ )); do
    echo &quot;J=$J&quot;
done</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 08:26:53 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400893#p400893</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400890#p400890</link>
			<description><![CDATA[<p>Подскажите тогда как реализовать цикл:</p><p>есть var1 я её сравниваю с var2, которая если не равна var1 мы её увеличиваем на 1 и опять проверяем.</p><p>Есть уже цикл while read line; do новый цикл описанный выше done &lt; ${FILE}</p>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 08:02:14 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400890#p400890</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400865#p400865</link>
			<description><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>А задачу я вроде с самого начала описал. Есть два массива с цифрами, сравниваем, в один файл цифры совпашие, а в другой те что не совпали, но все в единичном экземпляре.</p></blockquote></div><p>откуда вы массивы взяли?</p><p>ну сделайте третий массив, массив совпадений.</p><p>если совсем лень: <a href="http://us1.php.net/manual/ru/function.array-intersect.php">http://us1.php.net/manual/ru/function.a … ersect.php</a></p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 06:27:13 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400865#p400865</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400863#p400863</link>
			<description><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>это не совсем правильно, так как во втором файле я получаю вместо 8 результатов (несовпавших цифр) 48 результатов (задвоенных)</p></blockquote></div><p>man sort<br />man uniq</p><p>Если хотите конкретику, то данные покажите. Или читайте маны самостоятельно.</p><p>Третий вариант: денег заплатить кому-нить.</p>]]></description>
			<author><![CDATA[null@example.com (drBatty)]]></author>
			<pubDate>Mon, 17 Mar 2014 06:19:55 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400863#p400863</guid>
		</item>
		<item>
			<title><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link>https://linuxforum.ru/viewtopic.php?pid=400860#p400860</link>
			<description><![CDATA[<p>array_a = (2 3 6 9)<br />array _b = (1 2 3 4 5 6 7 8 9 10)</p><p>file_a: 2 3 6 9<br />file_b: 1 4 5 7 8 10</p><p>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 её не вывели) и т.д.</p>]]></description>
			<author><![CDATA[null@example.com (prostornet)]]></author>
			<pubDate>Mon, 17 Mar 2014 06:09:00 +0000</pubDate>
			<guid>https://linuxforum.ru/viewtopic.php?pid=400860#p400860</guid>
		</item>
	</channel>
</rss>
