<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>BASH | DCMST</title><link>https://portfolio.devcrumbs.com/tag/bash/</link><atom:link href="https://portfolio.devcrumbs.com/tag/bash/index.xml" rel="self" type="application/rss+xml"/><description>BASH</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Wed, 17 May 2023 00:00:00 +0000</lastBuildDate><image><url>https://portfolio.devcrumbs.com/media/icon_hu28290437db960aa4e7d19bb9f7230401_6937_512x512_fill_lanczos_center_3.png</url><title>BASH</title><link>https://portfolio.devcrumbs.com/tag/bash/</link></image><item><title>Convert and merge xlsx files into a db</title><link>https://portfolio.devcrumbs.com/learned/merge-convert-xlsx-db/</link><pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><guid>https://portfolio.devcrumbs.com/learned/merge-convert-xlsx-db/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">#!/bin/bash&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Loop through all xlsx files in the current directory&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> file in *.xlsx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">do&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Convert xlsx file to csv format using xlsx2csv&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> xlsx2csv &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$file&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">${&lt;/span>&lt;span class="nv">file&lt;/span>&lt;span class="p">%.xlsx&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">.csv&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">done&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Combine all csv files into a single file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cat *.csv &amp;gt; combined.csv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">#create database&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sqlite3 combined.db &lt;span class="s">&amp;lt;&amp;lt;EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">CREATE TABLE combined (
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> Entry VARCHAR,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> Ref FLOAT,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s"> ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">);
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Import the content from the combined.csv file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sqlite3 combined.db &lt;span class="s">&amp;lt;&amp;lt;EOF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">.mode csv
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">.import combined.csv combined
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s">EOF&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Kill a process running on port x on Linux</title><link>https://portfolio.devcrumbs.com/learned/kill-process-on-port/</link><pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate><guid>https://portfolio.devcrumbs.com/learned/kill-process-on-port/</guid><description>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">sudo &lt;span class="nb">kill&lt;/span> -9 &lt;span class="sb">`&lt;/span>sudo lsof -t -i:&lt;span class="o">[&lt;/span>x&lt;span class="o">]&lt;/span>&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>where &lt;code>[x]&lt;/code> is the port number&lt;/p></description></item><item><title>Circular cropping from BASH</title><link>https://portfolio.devcrumbs.com/learned/circle-cropping-bash/</link><pubDate>Fri, 12 May 2023 00:00:00 +0000</pubDate><guid>https://portfolio.devcrumbs.com/learned/circle-cropping-bash/</guid><description>&lt;p>The drawing should be ~ half of the original image&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">convert input.png &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -gravity Center &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="se">\(&lt;/span> -size 1024x1024 &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> xc:Black &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -fill White &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -draw &lt;span class="s1">&amp;#39;circle 500 500 500 1&amp;#39;&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -alpha Copy &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="se">\)&lt;/span> -compose CopyOpacity -composite &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> -trim output.png
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Modified grep command</title><link>https://portfolio.devcrumbs.com/learned/modified-grep-command/</link><pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate><guid>https://portfolio.devcrumbs.com/learned/modified-grep-command/</guid><description>&lt;p>When executing the command &lt;code>ps aux | grep -rI process&lt;/code>, the displayed results appear as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl"> &lt;span class="m">8176&lt;/span> process
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="m">8189&lt;/span> grep -rI process
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The second entry in the result corresponds to the command we just executed. Although this is typically not problematic, it can lead to issues if you intend to use this command within a bash if statement to check whether &lt;code>process&lt;/code> is running. In such cases, the command would return true even if &lt;code>process&lt;/code> is not running.&lt;/p>
&lt;p>To ensure that the command returns nothing when &lt;code>process&lt;/code> is not running, you can modify it as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">ps aux &lt;span class="p">|&lt;/span> grep -rI &lt;span class="o">[&lt;/span>p&lt;span class="o">]&lt;/span>rocess
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The addition of brackets in the regex causes grep to interpret the query in the same way, but it prevents the literal string &lt;code>[p]rocess&lt;/code> from matching &lt;code>process_name&lt;/code>. Consequently, the modified command produces the following desired output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="m">8176&lt;/span> process
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This behavior is preferable for certain use cases.&lt;/p></description></item></channel></rss>