<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: помогите со скриптом на bash</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html</link>
    <description>Доброго дня учасникам, я тут новенький и если что не так, безжалостно тычте носом куда следует.&lt;br&gt;Итак, мне нужно написать скрипт, который бы разбирал два файла на строки и, при совпадении второго поля строки первого с третьим полем строки второго файла, он бы записывал то, что в третьем поле первого файла в четвертое поле второго файла. Так как я еще совсем зеленый скриптописатель, углубился в гуглы и наваял вот что&lt;br&gt;&lt;br&gt;#!/usr/local/bin/bash&lt;br&gt;readfile=file1&lt;br&gt;writefile=file2&lt;br&gt;exitfile=exitfile.csv&lt;br&gt;cat $readfile &amp;#124; while read line;&lt;br&gt;  do&lt;br&gt;  name=&#096;echo $line &amp;#124; awk -F&apos;;&apos; &apos;&#123;print $2&#125;&apos; &amp;#124; sed &apos;s/&#091;0-9&#093;//g&apos;&#096;&lt;br&gt;  dlya_vstavki=&#096;echo $line &amp;#124;  awk -F&apos;;&apos; &apos;&#123;print $3&#125;&apos;&#096;&lt;br&gt;cat $writefile &amp;#124; while read line1;&lt;br&gt;  do&lt;br&gt;  name1=&#096;echo $line1 &amp;#124; awk -F&apos;;&apos; &apos;&#123;print $3&#125;&apos; &amp;#124; sed &apos;s/&#091;0-9&#093;//g&apos;&#096;&lt;br&gt;if &#091; &quot;$name&quot; = &quot;$name1&quot; &#093;&lt;br&gt; then&lt;br&gt;  cat $writefile &amp;#124; awk -F&apos;;&apos; -v code=&quot;$dlya_vstavki&quot; &apos;&#123;$4=code; print&#125;&apos; &amp;gt; $exitfile&lt;br&gt;   echo &apos;=== naideno sovpadenie dlya&apos; $name &apos;i v opisanie dobavleno&apos; $dlya_vstavki &apos;===&apos; &amp;gt;&amp;gt; lo</description>

<item>
    <title>помогите со скриптом на bash (wcpl)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#8</link>
    <pubDate>Tue, 01 Nov 2011 18:15:45 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt; 1 и строку с тем же номером в файле 2, после &lt;br&gt;&amp;gt; чего, при выполнении условия, модифицировал файл 2. Никакого рандома и &quot;случайностей&quot;. &lt;br&gt;&amp;gt; Проверяйте и не несите бред.&lt;br&gt;&amp;gt; Если в файле 1 надо для каждого столбца каждой строки в файле &lt;br&gt;&amp;gt; 2 найти все совпадения, это надо было указать в задаче явно, &lt;br&gt;&amp;gt; а не кривотолками &quot;...я и говорю...&quot;.&lt;br&gt;&amp;gt; Чтобы пилить переменную: &lt;br&gt;&amp;gt; 1) читаем файл 2 в нее: var=$(cat 2) &lt;br&gt;&amp;gt; 2) пример замены: echo &quot;$var&quot; &amp;#124; awk ...&lt;br&gt;&amp;gt; 3) дампим echo &quot;$var&quot; &amp;gt; dump &lt;br&gt;&lt;br&gt;ооо, вот теперь я тебя понял, долго вникал, много раз перечитал, но заставил мозг работать, теперь все работает, спасибо!&lt;br&gt;</description>
</item>

<item>
    <title>помогите со скриптом на bash (erera22)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#7</link>
    <pubDate>Fri, 28 Oct 2011 15:11:49 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; правки которого, слить в файл.&lt;br&gt;&amp;gt; Так я и говорю, что количество строк первого файла не совпадает с &lt;br&gt;&amp;gt; количеством строк второго файла. Во втором строк с совпадением может быть &lt;br&gt;&amp;gt; произвольное количество до 10, единственное что постоянно, что повторяющиеся строки стоят &lt;br&gt;&amp;gt; подряд. Потому строка с номером  N в пером файле и &lt;br&gt;&amp;gt; совпала всего единожды, по всей видимости совершенно случайно.&lt;br&gt;&amp;gt;&amp;gt;Ничего не мешает писать в переменную результат &quot;моего&quot; awk, несколько раз модифицировать и лишь в итоге дампить его в файл.&lt;br&gt;&amp;gt; А можно тут поподробней? Мне самое интересное как из переменной записать в &lt;br&gt;&amp;gt; файл заменив поле&#092;всю строку, с полным сохранением синтаксиса исходного файла. А &lt;br&gt;&amp;gt; не заменять поле всех строк файла.&lt;br&gt;&lt;br&gt;Млин, у Вас было сказано &quot;нужно написать скрипт, который бы разбирал два файла на строки&quot;, потому скрипт и смотрел строку N в файле 1 и строку с тем же номером в файле 2, после чего, при выполнении условия, модифицировал файл 2. Никакого рандома и &quot;случайностей&quot;. Проверя</description>
</item>

<item>
    <title>помогите со скриптом на bash (wcpl)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#6</link>
    <pubDate>Fri, 28 Oct 2011 06:41:57 GMT</pubDate>
    <description>&amp;gt; Или я не вижу своей ошибки/не понял Вашей трактовки. Или Вы ошибаетесь. &lt;br&gt;&amp;gt; Суть скрипта: перебираю второй элемент файла $file1 построчно. Для каждой строки получаю &lt;br&gt;&amp;gt; 3 элемент $file2 в строке с тем же номером. В случае, &lt;br&gt;&amp;gt; если они равны, нахожу 3 элемент в первом файле и заменяю &lt;br&gt;&amp;gt; 4ый awk &#123; $4 &#125; во втором.&lt;br&gt;&amp;gt; К недостаткам способа можно отнести, что $file2 каждый раз перезаписывается целиком. Как &lt;br&gt;&amp;gt; сказано ниже, ничего не мешает считать его в $var, по окончании &lt;br&gt;&amp;gt; правки которого, слить в файл.&lt;br&gt;&lt;br&gt;Так я и говорю, что количество строк первого файла не совпадает с количеством строк второго файла. Во втором строк с совпадением может быть произвольное количество до 10, единственное что постоянно, что повторяющиеся строки стоят подряд. Потому строка с номером  N в пером файле и совпала всего единожды, по всей видимости совершенно случайно.&lt;br&gt;&lt;br&gt;&amp;gt;Ничего не мешает писать в переменную результат &quot;моего&quot; awk, несколько раз модифицировать и лишь в итоге дампить его в файл.&lt;br&gt;&lt;br&gt;А можно тут поподробней? Мне самое и</description>
</item>

<item>
    <title>помогите со скриптом на bash (erera22)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#5</link>
    <pubDate>Thu, 27 Oct 2011 22:20:41 GMT</pubDate>
    <description>&amp;gt;&amp;gt;   cat $writefile &amp;#124; awk -F&apos;;&apos; -v code=&quot;$dlya_vstavki&quot; &apos;&#123;$4=code; print&#125;&apos; &amp;gt;  $exitfile &lt;br&gt;&amp;gt; на самом деле, на сколько я понял, играясь с отладкой моего опуса, &lt;br&gt;&amp;gt; вся проблема только в этой строке. здесь же скрипт берет весь &lt;br&gt;&amp;gt; файл и заменяет во всем четвертое поле тем значением переменной $dlya_vstavki &lt;br&gt;&amp;gt; которое является актуальным для данной итерации.&lt;br&gt;&amp;gt; у меня в голове никак не может родиться алгоритм, по которому бы &lt;br&gt;&amp;gt; скрипт держал в уме номер строки вложенного цикла и менял 4ое &lt;br&gt;&amp;gt; поле при соблюдении условия только в этой строке, а не во &lt;br&gt;&amp;gt; всем файле. Сейчас кручу варианты по использованию скрипта erra22, но пока &lt;br&gt;&amp;gt; никак не выходит.&lt;br&gt;&lt;br&gt;Ничего не мешает писать в переменную результат &quot;моего&quot; awk, несколько раз модифицировать и лишь в итоге дампить его в файл.&lt;br&gt;</description>
</item>

<item>
    <title>помогите со скриптом на bash (erera22)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#4</link>
    <pubDate>Thu, 27 Oct 2011 22:17:49 GMT</pubDate>
    <description>Исходные файлы:&lt;br&gt;file1&lt;br&gt;==========&lt;br&gt;fs fsd fdd fs123&lt;br&gt;fs 333 6fdd fs123&lt;br&gt;fs 2fsd 7fdd fs123&lt;br&gt;fs 333 8fdd fs123&lt;br&gt;fs 333 9fdd fs123&lt;br&gt;&lt;br&gt;file2&lt;br&gt;==========&lt;br&gt;fs fsd 00fdd 444&lt;br&gt;fs ggg 333 444 fs123&lt;br&gt;fs ggg 333 444 fs123&lt;br&gt;fs ggg ==3fsd 444 fs123&lt;br&gt;fs ggg 333 444 fs123&lt;br&gt;fs ggg ==4fsd 444 fs123&lt;br&gt;fs hhh4fsd= ==009fdd 444&lt;br&gt;fs hhh 4fsd 444 fs123&lt;br&gt;fs hhh 333 444 fs123&lt;br&gt;&lt;br&gt;Как видно, замены должны быть произведены во 2, 5 строках, что и произошло.&lt;br&gt;&lt;br&gt;Результат выполнения скрипта&lt;br&gt;============================&lt;br&gt;cat -n /tmp/file2&lt;br&gt;     1  fs fsd 00fdd 444&lt;br&gt;     2  fs ggg 333 6fdd fs123&lt;br&gt;     3  fs ggg 333 444 fs123&lt;br&gt;     4  fs ggg ==3fsd 444 fs123&lt;br&gt;     5  fs ggg 333 9fdd fs123&lt;br&gt;     6  fs ggg ==4fsd 444 fs123&lt;br&gt;     7  fs hhh4fsd= ==009fdd 444&lt;br&gt;     8  fs hhh 4fsd 444 fs123&lt;br&gt;     9  fs hhh 333 444 fs123&lt;br&gt;&lt;br&gt;Или я не вижу своей ошибки/не понял Вашей трактовки. Или Вы ошибаетесь.&lt;br&gt;Суть скрипта: перебираю второй элемент файла $file1 построчно. Для каждой строки получаю 3 элемент $file2 в строке с тем же номером. В случае, если они р</description>
</item>

<item>
    <title>помогите со скриптом на bash (wcpl)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#3</link>
    <pubDate>Thu, 27 Oct 2011 20:22:53 GMT</pubDate>
    <description>&amp;gt;   cat $writefile &amp;#124; awk -F&apos;;&apos; -v code=&quot;$dlya_vstavki&quot; &apos;&#123;$4=code; print&#125;&apos; &amp;gt;  $exitfile&lt;br&gt;&lt;br&gt;на самом деле, на сколько я понял, играясь с отладкой моего опуса, вся проблема только в этой строке. здесь же скрипт берет весь файл и заменяет во всем четвертое поле тем значением переменной $dlya_vstavki которое является актуальным для данной итерации.&lt;br&gt;у меня в голове никак не может родиться алгоритм, по которому бы скрипт держал в уме номер строки вложенного цикла и менял 4ое поле при соблюдении условия только в этой строке, а не во всем файле. Сейчас кручу варианты по использованию скрипта erra22, но пока никак не выходит.&lt;br&gt;</description>
</item>

<item>
    <title>помогите со скриптом на bash (wcpl)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#2</link>
    <pubDate>Thu, 27 Oct 2011 19:06:00 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;       awk &apos;&#123; if (NR == &apos;$strnum&apos;) &lt;br&gt;&amp;gt; $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; &quot;&apos;$file2&apos;&quot; &#125;&apos; $file2 &lt;br&gt;&amp;gt;    fi &lt;br&gt;&amp;gt;    let strnum=$strnum+1 &lt;br&gt;&amp;gt; done &lt;br&gt;&amp;gt; Замены произведутся в $file2 иначе (если надо другой output.file) исправьте строку &lt;br&gt;&amp;gt; с awk &apos;&#123; if (NR == &apos;$strnum&apos;) $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; &quot;&apos;$file2&apos;&quot; &lt;br&gt;&amp;gt; &#125;&apos; $file2 &lt;br&gt;&amp;gt; на awk &apos;&#123; if (NR == &apos;$strnum&apos;) $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; /tmp/out &lt;br&gt;&amp;gt; &#125;&apos; $file2 &lt;br&gt;&lt;br&gt;скрипт хороший, но даже не запуская я вижу одну проблему, заключается она в том, что в file2 есть произвольное количество совпадений каждого второго поля file1, эти совпадения стоят подряд, но сколько их по количеству нельзя сказать наверняка. их может быть 2 3 5 или N. и получается? что переменная strnum сбивает весь скрипт, привязывая каждую итерацию к каждой строке. В итоге опять таки, совпал всего один варант как положено, видимо чисто случайно и везде 4 поле выходного файла заполнилось одним и тем же значением.&lt;br&gt;</description>
</item>

<item>
    <title>помогите со скриптом на bash (erera22)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/9266.html#1</link>
    <pubDate>Thu, 27 Oct 2011 11:02:13 GMT</pubDate>
    <description>#!/bin/bash&lt;br&gt;&lt;br&gt;file1=/tmp/file1&lt;br&gt;file2=/tmp/file2&lt;br&gt;&lt;br&gt;strnum=1&lt;br&gt;awk &apos;&#123; print $2 &#125;&apos; $file1 &amp;#124; while read e2_1&lt;br&gt;do&lt;br&gt;   e3_2=$(awk &apos;&#123; if (NR == &apos;$strnum&apos;) &#123; print $3 &#125; &#125;&apos; $file2)&lt;br&gt;   if &#091; &quot;$e2_1&quot; == &quot;$e3_2&quot; &#093;; then&lt;br&gt;      e3_1=$(awk &apos;&#123; if (NR == &apos;$strnum&apos;) print $3 &#125;&apos; $file1)&lt;br&gt;      awk &apos;&#123; if (NR == &apos;$strnum&apos;) $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; &quot;&apos;$file2&apos;&quot; &#125;&apos; $file2&lt;br&gt;   fi&lt;br&gt;   let strnum=$strnum+1&lt;br&gt;done&lt;br&gt;&lt;br&gt;Замены произведутся в $file2 иначе (если надо другой output.file) исправьте строку&lt;br&gt;с awk &apos;&#123; if (NR == &apos;$strnum&apos;) $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; &quot;&apos;$file2&apos;&quot; &#125;&apos; $file2&lt;br&gt;на awk &apos;&#123; if (NR == &apos;$strnum&apos;) $4=&quot;&apos;$e3_1&apos;&quot;; print $0 &amp;gt; /tmp/out &#125;&apos; $file2&lt;br&gt;</description>
</item>

</channel>
</rss>
