<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; [Решено]сравнение массивов]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=34216&amp;type=atom" />
	<updated>2014-03-17T17:48:30Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=34216</id>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=401067#p401067" />
			<content type="html"><![CDATA[<p>Спасибо за науку, на будущее учту.</p>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T17:48:30Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=401067#p401067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400970#p400970" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T14:04:29Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400970#p400970</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400968#p400968" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T13:42:43Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400968#p400968</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400961#p400961" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T13:05:37Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400961#p400961</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400958#p400958" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T12:46:59Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400958#p400958</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400953#p400953" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>prostornet пишет:</cite><blockquote><p>Вывод все равно не дает желаемого результата.</p></blockquote></div><p>что вам не нравится-то?</p><p>PS: ЯННП в вашем скрипт. Может вы его перепишете по-человечески? Это нормально, все так делают.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T12:27:14Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400953#p400953</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400922#p400922" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T11:03:00Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400922#p400922</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400897#p400897" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T09:33:54Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400897#p400897</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400895#p400895" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T09:09:51Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400895#p400895</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400894#p400894" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T08:37:42Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400894#p400894</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400893#p400893" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T08:26:53Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400893#p400893</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400890#p400890" />
			<content type="html"><![CDATA[<p>Подскажите тогда как реализовать цикл:</p><p>есть var1 я её сравниваю с var2, которая если не равна var1 мы её увеличиваем на 1 и опять проверяем.</p><p>Есть уже цикл while read line; do новый цикл описанный выше done &lt; ${FILE}</p>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T08:02:14Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400890#p400890</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400865#p400865" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T06:27:13Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400865#p400865</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400863#p400863" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-03-17T06:19:55Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400863#p400863</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: [Решено]сравнение массивов]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=400860#p400860" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[prostornet]]></name>
				<uri>https://linuxforum.ru/profile.php?id=62</uri>
			</author>
			<updated>2014-03-17T06:09:00Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=400860#p400860</id>
		</entry>
</feed>
