<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Linux Forum &mdash; Помогите написать скрипт на Bash. Подмена значений .]]></title>
	<link rel="self" href="https://linuxforum.ru/extern.php?action=feed&amp;tid=36292&amp;type=atom" />
	<updated>2014-10-10T10:18:19Z</updated>
	<generator>PunBB</generator>
	<id>https://linuxforum.ru/viewtopic.php?id=36292</id>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425717#p425717" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>chelovekot пишет:</cite><blockquote><p>мегагуру bash-scripting&#039;a drBatty.</p></blockquote></div><p>тут лучше sed.</p><div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>for i in `cat list`</p></blockquote></div><p>ну нахрена&nbsp; жеж?!<br /></p><div class="codebox"><pre><code>while  read line; do …; done &lt;list</code></pre></div><div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>ед-е условие HOLE и WELL_BASH , должны встречаться один раз в файле.</p></blockquote></div><p>в&nbsp; моём&nbsp; решении выше может&nbsp; сколько&nbsp; угодно раз, меняется первое HOLE на последнее WELL.<br /></p><div class="quotebox"><cite>tmp13 пишет:</cite><blockquote><p>tac rep.txt</p></blockquote></div><p>тоже интересный вариант.<br /></p><div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>sed -nre &#039;H;/WELL_BASH/{x;s!(HOLE\s*=\s*)([^\n]+)(\s*/\*[^\n]*\n.*\nWELL_BASH\s*=\s*)([^\n]+)(\s*/\*[^\n]*\n)!\1\4\3\4\5!;p}&#039; &lt;file&gt;</p></blockquote></div><p>хм. Опередили.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-10-10T10:18:19Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425717#p425717</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425715#p425715" />
			<content type="html"><![CDATA[<p><strong>borisgorbunov</strong>, <br />как-то так:<br /><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">$ sed -rn &#039;H;${x;s~(HOLE =)([^/]*)(.*)(WELL_BASH =)([^/]*)~\1\5\3\4\5~;s/\n//;p}&#039; f<br />HOLE = 249KZK /*<br />PROJECT = Yark_wdb_int@pnsmos5 /*<br />DEPTH_BOTTOM = - /* Downhole depth (METRES) DOUBLE<br />DRILLED_DEPTH = - /* Total Depth - Driller (METRES) DOUBLE<br />ELEV_MEAS_REF = 181.43 /* Elevation of Measurement Reference (METRES) DOUBLE<br />FIELD = Jarkeevsky /* Field<br />LOCATION = Kjizjil-Kjychevskaja /* Location<br />LOGGED_DEPTH = - /* Total Depth - Logger (METRES) DOUBLE<br />SYMBOL = CIRCLE /* Symbol<br />TVD_BOTTOM = - /* True Vertical Depth at well bottom (METRES) DOUBLE<br />TYPE = SPM /*<br />WELL_BASH = 249KZK /* Primary Well Identifier<br /></div><br />это в предположении, что WELL_BASH всегда идёт&nbsp; ПОСЛЕ HOLE.<br />Если ДО, то проще.</p>]]></content>
			<author>
				<name><![CDATA[drBatty]]></name>
				<uri>https://linuxforum.ru/profile.php?id=86</uri>
			</author>
			<updated>2014-10-10T10:12:57Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425715#p425715</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425347#p425347" />
			<content type="html"><![CDATA[<p>Да обосраться можно, все такие умные.</p>]]></content>
			<author>
				<name><![CDATA[i2ks]]></name>
				<uri>https://linuxforum.ru/profile.php?id=16</uri>
			</author>
			<updated>2014-10-07T15:10:00Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425347#p425347</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425344#p425344" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Fat-Zer пишет:</cite><blockquote><p>как же иногда хочется ходить по улицам и убивать людей, которые в одной строке мешают sed, grep и awk... ...</p></blockquote></div><p>Ну ты тут не одинок...</p>]]></content>
			<author>
				<name><![CDATA[stranger]]></name>
				<uri>https://linuxforum.ru/profile.php?id=33370</uri>
			</author>
			<updated>2014-10-07T14:27:55Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425344#p425344</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425340#p425340" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>borisgorbunov пишет:</cite><blockquote><p>for i in `ls -1`;do  b=`grep WELL_BASH $i|awk &#039;{print $3}&#039;`; a=`grep HOLE $i|awk &#039;{print $3}&#039;`;sed -ri &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; $i;done</p></blockquote></div><div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>a=`grep HOLE file|awk &#039;{print $3}&#039;`<br />b=`grep WELL_BASH file|awk &#039;{print $3}&#039;`<br />sed -ri &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; file</p></blockquote></div><div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>for i in `ls -1`;do&nbsp; b=`grep WELL_BASH $i|awk &#039;{print $3}&#039;`; a=`grep HOLE $i|awk &#039;{print $3}&#039;`;sed &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; $i;done</p></blockquote></div><p>как же иногда хочется ходить по улицам и убивать людей, которые в одной строке мешают sed, grep и awk... хорошо хоть тут tr и cut не понадобились... =)</p><p>наиболее разумное решение, ИМХО:<br /></p><div class="codebox"><pre><code>find -type f | while read f; do 
  well_bash=$(sed -rne &#039;s!^WELL_BASH\s=\s(.+)\s/\*.*$!\1!p&#039; $f)
  sed -re &#039;s!^(HOLE\s=\s).+(\s/\*.*)$!\1&#039;&quot;$well_bash&quot;&#039;\2!&#039;  -i  $f
done</code></pre></div><p>ради спортивного интереса, одним sed скриптом:<br /></p><div class="codebox"><pre><code>sed -nre &#039;H;/WELL_BASH/{x;s!(HOLE\s*=\s*)([^\n]+)(\s*/\*[^\n]*\n.*\nWELL_BASH\s*=\s*)([^\n]+)(\s*/\*[^\n]*\n)!\1\4\3\4\5!;p}&#039; &lt;file&gt;</code></pre></div><p>само собой, у каждого способа есть свои недостатки...</p>]]></content>
			<author>
				<name><![CDATA[Fat-Zer]]></name>
				<uri>https://linuxforum.ru/profile.php?id=11911</uri>
			</author>
			<updated>2014-10-07T14:21:29Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425340#p425340</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425312#p425312" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>borisgorbunov пишет:</cite><blockquote><p>Вот так ???</p></blockquote></div><p>да, может на 10ке файлов это проверить. :-)</p>]]></content>
			<author>
				<name><![CDATA[i2ks]]></name>
				<uri>https://linuxforum.ru/profile.php?id=16</uri>
			</author>
			<updated>2014-10-07T12:51:55Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425312#p425312</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425308#p425308" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>сделал два файла<br /></p><div class="codebox"><pre><code>for i in `ls -1`;do  b=`grep WELL_BASH $i|awk &#039;{print $3}&#039;`; a=`grep HOLE $i|awk &#039;{print $3}&#039;`;sed &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; $i;done</code></pre></div><br /><p>только у меня просто вывод, а надо еще добавить будет ключик -ri после слова sed</p></blockquote></div><br /><br /><p>for i in `ls -1`;do&nbsp; b=`grep WELL_BASH $i|awk &#039;{print $3}&#039;`; a=`grep HOLE $i|awk &#039;{print $3}&#039;`;sed -ri &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; $i;done</p><p>Вот так ???</p>]]></content>
			<author>
				<name><![CDATA[borisgorbunov]]></name>
				<uri>https://linuxforum.ru/profile.php?id=34080</uri>
			</author>
			<updated>2014-10-07T12:18:47Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425308#p425308</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425306#p425306" />
			<content type="html"><![CDATA[<p>Огромное спасибо всем. Беру сие творения на заметку. <img src="https://linuxforum.ru/img/smilies/bs.gif" alt="bs" /></p>]]></content>
			<author>
				<name><![CDATA[borisgorbunov]]></name>
				<uri>https://linuxforum.ru/profile.php?id=34080</uri>
			</author>
			<updated>2014-10-07T12:13:03Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425306#p425306</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425298#p425298" />
			<content type="html"><![CDATA[<p>Да без sed какай то <span style="color: red"><strong>[CENSORED]</strong></span> типа:<br /></p><div class="codebox"><pre><code>for file in *.txt; do tac $file|awk -F[=\ ] &#039;{if(index($0,&quot;WELL_BASH&quot;)&gt;0){WB=$4};gsub(/HOLE = [a-Z]*_[0-9]*/,&quot;HOLE = &quot;WB); print $0}&#039;|tac &gt; new_$file; mv new_$file $file; done</code></pre></div>]]></content>
			<author>
				<name><![CDATA[tmp13]]></name>
				<uri>https://linuxforum.ru/profile.php?id=498</uri>
			</author>
			<updated>2014-10-07T11:46:08Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425298#p425298</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425289#p425289" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>beliy пишет:</cite><blockquote><p>А в чем сложность то? делайте это внутри цикла</p></blockquote></div><p>ни в чем)</p>]]></content>
			<author>
				<name><![CDATA[i2ks]]></name>
				<uri>https://linuxforum.ru/profile.php?id=16</uri>
			</author>
			<updated>2014-10-07T11:23:12Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425289#p425289</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425287#p425287" />
			<content type="html"><![CDATA[<p>сделал два файла<br /></p><div class="codebox"><pre><code>$ ls -l
total 8
-rw-rw-r-- 1 526 Oct  7 15:16 file1
-rw-rw-r-- 1 528 Oct  7 15:16 file2</code></pre></div><p>содержание файлов:<br /></p><div class="codebox"><pre><code>$ cat file1
HOLE = KZK_249 /*
PROJECT = Yark_wdb_int@pnsmos5 /*
DEPTH_BOTTOM = - /* Downhole depth (METRES) DOUBLE
DRILLED_DEPTH = - /* Total Depth - Driller (METRES) DOUBLE
ELEV_MEAS_REF = 181.43 /* Elevation of Measurement Reference (METRES) DOUBLE
FIELD = Jarkeevsky /* Field
LOCATION = Kjizjil-Kjychevskaja /* Location
LOGGED_DEPTH = - /* Total Depth - Logger (METRES) DOUBLE
SYMBOL = CIRCLE /* Symbol
TVD_BOTTOM = - /* True Vertical Depth at well bottom (METRES) DOUBLE
TYPE = SPM /*
WELL_BASH = 249KZK /* Primary Well Identifier

и

$ cat file2
HOLE = KZK_2409 /*
PROJECT = Yark_wdb_int@pnsmos5 /*
DEPTH_BOTTOM = - /* Downhole depth (METRES) DOUBLE
DRILLED_DEPTH = - /* Total Depth - Driller (METRES) DOUBLE
ELEV_MEAS_REF = 181.43 /* Elevation of Measurement Reference (METRES) DOUBLE
FIELD = Jarkeevsky /* Field
LOCATION = Kjizjil-Kjychevskaja /* Location
LOGGED_DEPTH = - /* Total Depth - Logger (METRES) DOUBLE
SYMBOL = CIRCLE /* Symbol
TVD_BOTTOM = - /* True Vertical Depth at well bottom (METRES) DOUBLE
TYPE = SPM /*
WELL_BASH = 249KZ0K /* Primary Well Identifier</code></pre></div><p>далее в цикле все:<br /></p><div class="codebox"><pre><code>for i in `ls -1`;do  b=`grep WELL_BASH $i|awk &#039;{print $3}&#039;`; a=`grep HOLE $i|awk &#039;{print $3}&#039;`;sed &#039;s/&#039;$a&#039;/&#039;$b&#039;/g&#039; $i;done</code></pre></div><p>результат:<br /></p><div class="codebox"><pre><code>HOLE = 249KZK /*
PROJECT = Yark_wdb_int@pnsmos5 /*
DEPTH_BOTTOM = - /* Downhole depth (METRES) DOUBLE
DRILLED_DEPTH = - /* Total Depth - Driller (METRES) DOUBLE
ELEV_MEAS_REF = 181.43 /* Elevation of Measurement Reference (METRES) DOUBLE
FIELD = Jarkeevsky /* Field
LOCATION = Kjizjil-Kjychevskaja /* Location
LOGGED_DEPTH = - /* Total Depth - Logger (METRES) DOUBLE
SYMBOL = CIRCLE /* Symbol
TVD_BOTTOM = - /* True Vertical Depth at well bottom (METRES) DOUBLE
TYPE = SPM /*
WELL_BASH = 249KZK /* Primary Well Identifier
HOLE = 249KZ0K /*
PROJECT = Yark_wdb_int@pnsmos5 /*
DEPTH_BOTTOM = - /* Downhole depth (METRES) DOUBLE
DRILLED_DEPTH = - /* Total Depth - Driller (METRES) DOUBLE
ELEV_MEAS_REF = 181.43 /* Elevation of Measurement Reference (METRES) DOUBLE
FIELD = Jarkeevsky /* Field
LOCATION = Kjizjil-Kjychevskaja /* Location
LOGGED_DEPTH = - /* Total Depth - Logger (METRES) DOUBLE
SYMBOL = CIRCLE /* Symbol
TVD_BOTTOM = - /* True Vertical Depth at well bottom (METRES) DOUBLE
TYPE = SPM /*
WELL_BASH = 249KZ0K /* Primary Well Identifier</code></pre></div><p>как видите все работате.</p><p>только у меня просто вывод, а надо еще добавить будет ключик -ri после слова sed</p>]]></content>
			<author>
				<name><![CDATA[i2ks]]></name>
				<uri>https://linuxforum.ru/profile.php?id=16</uri>
			</author>
			<updated>2014-10-07T11:21:38Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425287#p425287</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425284#p425284" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>Причем в каждом файле значения разные., значения a и b надо будет каждый роа обнулять на новые)</p><p>p.s. это я что то упустил.</p></blockquote></div><p>А в чем сложность то? делайте это внутри цикла <img src="https://linuxforum.ru/img/smilies/ab.gif" alt="ab" /></p>]]></content>
			<author>
				<name><![CDATA[beliy]]></name>
				<uri>https://linuxforum.ru/profile.php?id=34742</uri>
			</author>
			<updated>2014-10-07T11:16:34Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425284#p425284</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425283#p425283" />
			<content type="html"><![CDATA[<p>Я решил извращнуться на awk=)) как обычно=)<br /></p><div class="codebox"><pre><code>tac rep.txt |awk -F[=\ ] &#039;{if(index($0,&quot;WELL_BASH&quot;)&gt;0){WB=$4};gsub(/HOLE = [a-Z]*_[0-9]*/,&quot;HOLE = &quot;WB); print $0}&#039;|tac</code></pre></div><p>тут правда с учётом того что вид у HOLE всегда типа<br />HOLE = [a-Z]*_[0-9]* ну с этим можно поиграться...<br />Теперь вопрос как прореплейсить файлы если это необходимо=)</p>]]></content>
			<author>
				<name><![CDATA[tmp13]]></name>
				<uri>https://linuxforum.ru/profile.php?id=498</uri>
			</author>
			<updated>2014-10-07T11:15:46Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425283#p425283</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425269#p425269" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>i2ks пишет:</cite><blockquote><p>Причем в каждом файле значения разные., значения <strong>a</strong> и<strong> b</strong> надо будет каждый роа обнулять на новые)</p><p>p.s. это я что то упустил.</p></blockquote></div><p>Ну да в этом и загвоздка.</p>]]></content>
			<author>
				<name><![CDATA[borisgorbunov]]></name>
				<uri>https://linuxforum.ru/profile.php?id=34080</uri>
			</author>
			<updated>2014-10-07T10:49:53Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425269#p425269</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: Помогите написать скрипт на Bash. Подмена значений .]]></title>
			<link rel="alternate" href="https://linuxforum.ru/viewtopic.php?pid=425264#p425264" />
			<content type="html"><![CDATA[<p>Причем в каждом файле значения разные., значения <strong>a</strong> и<strong> b</strong> надо будет каждый роа обнулять на новые)</p><p>p.s. это я что то упустил.</p>]]></content>
			<author>
				<name><![CDATA[i2ks]]></name>
				<uri>https://linuxforum.ru/profile.php?id=16</uri>
			</author>
			<updated>2014-10-07T10:38:55Z</updated>
			<id>https://linuxforum.ru/viewtopic.php?pid=425264#p425264</id>
		</entry>
</feed>
