<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: AWK SPLIT</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html</link>
    <description>Уважаемые коллеги!&lt;br&gt;&lt;br&gt;Я пишу скрипт, который должен перебрать все файлы из списка и разобрать с помощью split имя каждого файла. Я делаю это так:&lt;br&gt;&lt;br&gt;for file in &#096;cat /$FileListFN&#096;; do&lt;br&gt;     echo &#096;awk   &apos;&lt;br&gt;                 &#123;N=split(FILENAME,FNParts,&quot;_&quot;)&#125;&lt;br&gt;                 &#123;for (i=1; i&amp;lt;=N; i++)&lt;br&gt;                    &#123;print FNParts&#091;i&#093; &quot; &amp;#124; &quot;&#125;&lt;br&gt;                 &#125;&lt;br&gt;                 &apos; $file&#096;&lt;br&gt;done&lt;br&gt;&lt;br&gt;При запуске я получаю что-то странное - из списка&lt;br&gt;&lt;br&gt;BD52_New_28_04_09.xml&lt;br&gt;BD5A_New_28_04_09.xml&lt;br&gt;BD62_New_28_04_09.xml&lt;br&gt;BD6A_New_28_04_09.xml&lt;br&gt;BD72_New_28_04_09.xml&lt;br&gt;BD7A_New_28_04_09.xml&lt;br&gt;BD82_New_28_04_09.xml&lt;br&gt;BD8A_New_28_04_09.xml&lt;br&gt;&lt;br&gt;получается такой вывод:&lt;br&gt;&lt;br&gt;BD52 &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124; BD52 &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124; BD52 &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124;&lt;br&gt;BD5A &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124; BD5A &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124; BD5A &amp;#124; New &amp;#124; 28 &amp;#124; 04 &amp;#124; 09.xml &amp;#124;&lt;br&gt;BD62 &amp;#124; N</description>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#13</link>
    <pubDate>Wed, 09 Sep 2009 11:32:01 GMT</pubDate>
    <description>Выяснил, что внутри awk-скрипта не надо писать $ перед именем переменной. Задача успешно решена, всем участникам обсуждения большое спасибо!&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#12</link>
    <pubDate>Wed, 09 Sep 2009 11:30:45 GMT</pubDate>
    <description>&amp;gt;Интересно, можно ли как-нибудь ограничить набор входных строк и обрабатывать, например, только &lt;br&gt;&amp;gt;первую строку? &lt;br&gt;&lt;br&gt;Решено использованием оператора &#123;exit&#125;.&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#11</link>
    <pubDate>Mon, 07 Sep 2009 08:21:49 GMT</pubDate>
    <description>Андрей, приветствую!&lt;br&gt;&lt;br&gt;А что означает&lt;br&gt;awk &apos;BEGIN&#123;сделать_из_строки_массив_tag(&quot;&apos;&quot;$FileNameTemplate&quot;&apos;&quot;&#125;? Мне не удалось заставить скрипт заработать...&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#10</link>
    <pubDate>Mon, 07 Sep 2009 08:11:24 GMT</pubDate>
    <description>Приветствую!&lt;br&gt;Ниже распишу задачу более подробно. Надо слить несколько однотипных XML-файлов в один большой XML, не потеряв при этом информацию об исходных файлах. Сохранять информацию предлагается в дополнительных тегах, которые добавятся в основной текст. Исходные XML-файлы представляют собой длинные строки, т.е., в первой строке лежит заголовок XML, а в следующих - записи XML, по одной записи на строку. Идея такая - шаблон имени файла (из входного параметра) разобрать в один массив Tag, имя текущего файла разобрать в другой массив FNPart, потом склеить из них XML-подобную строку вида &lt;br&gt;&amp;lt;Tag&#091;1&#093;&amp;gt;&amp;lt;FNPart&#091;1&#093;&amp;gt;&amp;lt;/Tag&#091;1&#093;&amp;gt; ... &amp;lt;Tag&#091;n&#093;&amp;gt;&amp;lt;FNPart&#091;n&#093;&amp;gt;&amp;lt;/Tag&#091;n&#093;&amp;gt;,&lt;br&gt;после этого выкинуть из очередного файла строку &amp;#8470;1 (с заголовком) и работать только с остальными, заменяя в них самое первое вхождение сочетания &amp;gt;&amp;lt; на &amp;gt;&amp;lt;Tag&#091;1&#093;&amp;gt;&amp;lt;FNPart&#091;1&#093;&amp;gt;&amp;lt;/Tag&#091;1&#093;&amp;gt; ... &amp;lt;Tag&#091;n&#093;&amp;gt;&amp;lt;FNPart&#091;n&#093;&amp;gt;&amp;lt;/Tag&#091;n&#093;&amp;gt;&amp;lt;. Этим я добьюсь добавления в текуший файл XML информации о названии этого файла. А потом я возьму шаблон заголовка (заголовок XML + открывающий</description>
</item>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#9</link>
    <pubDate>Mon, 07 Sep 2009 06:12:45 GMT</pubDate>
    <description>Интересно, можно ли как-нибудь ограничить набор входных строк и обрабатывать, например, только первую строку? Таким образом я смог бы убить все повторы, т.к., будет обрабатываться ровно одна строка. Я написал такое условие на входе:&lt;br&gt;&lt;br&gt;for file in &#096;cat /$FileListFN&#096;; do&lt;br&gt;   echo &#096;awk  &apos;NR==1&lt;br&gt;               &#123;N=split(FILENAME,FNParts,&quot;_&quot;)&#125;&lt;br&gt;               &#123;for (i=1; i&amp;lt;=N; i++) &lt;br&gt;                  &#123;print FNParts&#091;i&#093;&#125;&lt;br&gt;               &#125;&apos; $file&#096;&lt;br&gt;   echo $XMLInsertion&lt;br&gt;done&lt;br&gt;&lt;br&gt;, но оно не привело ни к чему хорошему - просто в случае выполнения шаблона выводится первая строка файла и все повторы из моего самого первого вопроса...&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (mx3ix)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#8</link>
    <pubDate>Fri, 04 Sep 2009 12:22:44 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;Пока я догадался делать это вот так: &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;FileNameTemplate=&quot;ID_Action_DD_MM_YY&quot; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;for file in &#096;cat /$FileListFN&#096;; do &lt;br&gt;&amp;gt;   XMLInsertion=&#096;echo $FileNameTemplate &amp;#124; awk &apos;&#123;N=split($0,Tags,&quot;_&quot;)&#125;&#123;split(FILENAME,FNParts,&quot;_&quot;)&#125;&#123;for (i=1; i&amp;lt;=N; i++) &#123;print &amp;lt;Tags&#091;i&#093;&amp;gt;&amp;lt;FNParts&#091;i&#093;&amp;gt;&amp;lt;&#092;Tags&#091;i&#093;&amp;gt;&#125;&#125;&apos; $file&#096;&lt;br&gt;&amp;gt;   echo $XMLInsertion &lt;br&gt;&amp;gt;done &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Но это падает с ошибкой синтаксиса. &lt;br&gt;&lt;br&gt;Вопрос не понятен. Очень сложный слог изложения. Не прослеживается формализация задачи. Но, все-таки, попробую помочь.&lt;br&gt;&lt;br&gt;Передача параметров в AWK (это написано в MAN и неоднократно проверено на практике) осуществляется посредством -v параметра. Например:&lt;br&gt;&lt;br&gt; awk -f MyMegaSuperAWKScript.awk -v FileNameTemplate=$MYMEGASUPERSHELLVARIABLE&lt;br&gt;&lt;br&gt;После чего внутри скрипта все это обрабатывается. С содержанием скрипта не смогу помочь, так как задача изложена невразумительно (с моей точки зрения).&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (Andrey Mitrofanov)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#7</link>
    <pubDate>Fri, 04 Sep 2009 12:14:51 GMT</pubDate>
    <description>&amp;gt;Ух ты, шикарно!&lt;br&gt;&lt;br&gt;Ну, да, мастерство не пропьёшь. B)&lt;br&gt;&lt;br&gt; Тогда ещё вопрос: шаблон имени файла задаётся переменной скрипта &lt;br&gt;&amp;gt;$FileNameTemplate немного выше по тексту (не попало в мою копипасту). Массив &lt;br&gt;&amp;gt;должен быть сформирован из него. Можно ли запихнуть в AWK обработку &lt;br&gt;&amp;gt;переменной скрипта? &lt;br&gt;&lt;br&gt;Ещё раз, внимательно:&lt;br&gt;&quot;&quot;не только имя файла, но и... &quot;три! четыре!! килограмма...&quot; ...чтение его построчно&quot;&quot;&lt;br&gt;&lt;br&gt;=Почитай, чего awk делает с входным файлом (бишь stdin-ом). Это в &quot;man awk&quot;, где-то там. Или man nawk, или man mawk, или man gawk... В любом из них. Главное найти - два абзаца примерно.&lt;br&gt;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Пока я догадался делать это вот так: &lt;br&gt;&amp;gt;FileNameTemplate=&quot;ID_Action_DD_MM_YY&quot; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;for file in &#096;cat /$FileListFN&#096;; do &lt;br&gt;&amp;gt;   XMLInsertion=&#096;&lt;br&gt;&amp;gt;Но это падает с ошибкой синтаксиса. &lt;br&gt;&lt;br&gt;С кавычками (экранированием спец.символов) всё _очень_ плохо.&lt;br&gt;&lt;br&gt;Пятница... Семья не ждёт?..&lt;br&gt;&lt;br&gt;FileNameTemplate=&quot;ID_Action_DD_MM_YY&quot;&lt;br&gt;&lt;br&gt;cat /$FileListFN &#092;&lt;br&gt; awk &apos;BEGIN&#123;сделать_из_строки_массив_tag(&quot;&apos;&quot;$FileNameTemplate&quot;&apos;&quot;&#125;&lt;br&gt;&apos;&#123;N=split($0,</description>
</item>

<item>
    <title>AWK SPLIT (SLario)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#6</link>
    <pubDate>Fri, 04 Sep 2009 11:19:51 GMT</pubDate>
    <description>Ух ты, шикарно! Тогда ещё вопрос: шаблон имени файла задаётся переменной скрипта $FileNameTemplate немного выше по тексту (не попало в мою копипасту). Массив должен быть сформирован из него. Можно ли запихнуть в AWK обработку переменной скрипта?&lt;br&gt;&lt;br&gt;Пока я догадался делать это вот так:&lt;br&gt;&lt;br&gt;FileNameTemplate=&quot;ID_Action_DD_MM_YY&quot;&lt;br&gt;&lt;br&gt;for file in &#096;cat /$FileListFN&#096;; do&lt;br&gt;   XMLInsertion=&#096;echo $FileNameTemplate &amp;#124; awk &apos;&#123;N=split($0,Tags,&quot;_&quot;)&#125;&#123;split(FILENAME,FNParts,&quot;_&quot;)&#125;&#123;for (i=1; i&amp;lt;=N; i++) &#123;print &amp;lt;Tags&#091;i&#093;&amp;gt;&amp;lt;FNParts&#091;i&#093;&amp;gt;&amp;lt;&#092;Tags&#091;i&#093;&amp;gt;&#125;&#125;&apos; $file&#096;&lt;br&gt;   echo $XMLInsertion&lt;br&gt;done&lt;br&gt;&lt;br&gt;Но это падает с ошибкой синтаксиса.&lt;br&gt;</description>
</item>

<item>
    <title>AWK SPLIT (Andrey Mitrofanov)</title>
    <link>https://slinkov.ru/openforum/vsluhforumID9/8420.html#5</link>
    <pubDate>Fri, 04 Sep 2009 11:15:29 GMT</pubDate>
    <description>&amp;gt;м.б., это можно сделать как-то проще? &lt;br&gt;&lt;br&gt;Можно, я не возражаю.&lt;br&gt;&lt;br&gt;&#123;printf FNParts&#091;i&#093; &quot; &amp;#124; &quot;&#125;&lt;br&gt; --&amp;gt;&lt;br&gt;&#123;print &quot;&amp;lt;Tag&#091;&quot;i&quot;&#093;&amp;gt;&quot; FNParts&#091;i&#093; &quot;&amp;lt;/Tag&#091;&quot;i&quot;&#093;&amp;gt;&quot;&#125;&lt;br&gt; или&lt;br&gt;&#123;print &quot;&amp;lt;&quot;Tag&#091;i&#093;&quot;&amp;gt;&quot;FNParts&#091;i&#093;&quot;&amp;lt;/&quot;Tag&#091;i&#093;&quot;&amp;gt;&quot;&#125;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
