|
5 | 5 | <link href="https://learnbyexample.github.io/atom.xml" rel="self" type="application/atom+xml"/>
|
6 | 6 | <link href="https://learnbyexample.github.io"/>
|
7 | 7 | <generator uri="https://www.getzola.org/">Zola</generator>
|
8 |
| - <updated>2023-07-25T00:00:00+00:00</updated> |
| 8 | + <updated>2023-08-01T00:00:00+00:00</updated> |
9 | 9 | <id>https://learnbyexample.github.io/atom.xml</id>
|
| 10 | + <entry xml:lang="en"> |
| 11 | + <title>CLI tip 31: concatenate files column wise</title> |
| 12 | + <published>2023-08-01T00:00:00+00:00</published> |
| 13 | + <updated>2023-08-01T00:00:00+00:00</updated> |
| 14 | + <link rel="alternate" href="https://learnbyexample.github.io/tips/cli-tip-31/" type="text/html"/> |
| 15 | + <id>https://learnbyexample.github.io/tips/cli-tip-31/</id> |
| 16 | + <content type="html"><p>The <code>paste</code> command is typically used to merge two or more files column wise. By default, <code>paste</code> adds a tab character between corresponding lines of input files.</p> |
| 17 | +<pre data-lang="ruby" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-ruby "><code class="language-ruby" data-lang="ruby"><span>$ cat colors_1.txt |
| 18 | +</span><span style="color:#5597d6;">Blue |
| 19 | +</span><span style="color:#5597d6;">Brown |
| 20 | +</span><span style="color:#5597d6;">Orange |
| 21 | +</span><span style="color:#5597d6;">Purple |
| 22 | +</span><span>$ cat colors_2.txt |
| 23 | +</span><span style="color:#5597d6;">Black |
| 24 | +</span><span style="color:#5597d6;">Blue |
| 25 | +</span><span style="color:#5597d6;">Green |
| 26 | +</span><span style="color:#5597d6;">Orange |
| 27 | +</span><span> |
| 28 | +</span><span>$ paste colors_1.txt colors_2.txt |
| 29 | +</span><span style="color:#5597d6;">Blue Black |
| 30 | +</span><span style="color:#5597d6;">Brown Blue |
| 31 | +</span><span style="color:#5597d6;">Orange Green |
| 32 | +</span><span style="color:#5597d6;">Purple Orange |
| 33 | +</span></code></pre> |
| 34 | +<p>You can use the <code>-d</code> option to change the delimiter between the columns. The separator is added even if the data has been exhausted for some of the input files.</p> |
| 35 | +<pre data-lang="ruby" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-ruby "><code class="language-ruby" data-lang="ruby"><span>$ paste </span><span style="color:#72ab00;">-</span><span>d</span><span style="color:#d07711;">&#39;|&#39; </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">3</span><span>) </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">4 5</span><span>) </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">6 8</span><span>) |
| 36 | +</span><span style="color:#b3933a;">1</span><span style="color:#72ab00;">|</span><span style="color:#b3933a;">4</span><span style="color:#72ab00;">|</span><span style="color:#b3933a;">6 |
| 37 | +</span><span style="color:#b3933a;">2</span><span style="color:#72ab00;">|</span><span style="color:#b3933a;">5</span><span style="color:#72ab00;">|</span><span style="color:#b3933a;">7 |
| 38 | +</span><span style="color:#b3933a;">3</span><span style="color:#72ab00;">||</span><span style="color:#b3933a;">8 |
| 39 | +</span><span> |
| 40 | +</span><span style="color:#7f8989;"># note that the space between -d and empty string is necessary here |
| 41 | +</span><span>$ paste </span><span style="color:#72ab00;">-</span><span>d </span><span style="color:#d07711;">&#39;&#39; </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">3</span><span>) </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">6 8</span><span>) |
| 42 | +</span><span style="color:#b3933a;">16 |
| 43 | +</span><span style="color:#b3933a;">27 |
| 44 | +</span><span style="color:#b3933a;">38 |
| 45 | +</span><span> |
| 46 | +</span><span style="color:#7f8989;"># use newline separator to interleave file contents |
| 47 | +</span><span>$ paste </span><span style="color:#72ab00;">-</span><span>d</span><span style="color:#d07711;">&#39;\n&#39; </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">11 12</span><span>) </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">101 102</span><span>) |
| 48 | +</span><span style="color:#b3933a;">11 |
| 49 | +</span><span style="color:#b3933a;">101 |
| 50 | +</span><span style="color:#b3933a;">12 |
| 51 | +</span><span style="color:#b3933a;">102 |
| 52 | +</span></code></pre> |
| 53 | +<p>You can use empty files to get multicharacter separation between the columns. The <code>pr</code> command is better suited for this task.</p> |
| 54 | +<pre data-lang="ruby" style="background-color:#f5f5f5;color:#1f1f1f;" class="language-ruby "><code class="language-ruby" data-lang="ruby"><span>$ paste </span><span style="color:#72ab00;">-</span><span>d</span><span style="color:#d07711;">&#39; : &#39; </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">3</span><span>) </span><span style="color:#72ab00;">/</span><span>dev</span><span style="color:#72ab00;">/</span><span>null </span><span style="color:#72ab00;">/</span><span>dev</span><span style="color:#72ab00;">/</span><span>null </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">4 6</span><span>) |
| 55 | +</span><span style="color:#b3933a;">1 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">4 |
| 56 | +</span><span style="color:#b3933a;">2 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">5 |
| 57 | +</span><span style="color:#b3933a;">3 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">6 |
| 58 | +</span><span> |
| 59 | +</span><span>$ pr </span><span style="color:#72ab00;">-</span><span>mts</span><span style="color:#d07711;">&#39; : &#39; </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">3</span><span>) </span><span style="color:#72ab00;">&lt;</span><span>(seq </span><span style="color:#b3933a;">4 6</span><span>) |
| 60 | +</span><span style="color:#b3933a;">1 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">4 |
| 61 | +</span><span style="color:#b3933a;">2 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">5 |
| 62 | +</span><span style="color:#b3933a;">3 </span><span style="color:#72ab00;">: </span><span style="color:#b3933a;">6 |
| 63 | +</span></code></pre> |
| 64 | +<p><strong>Video demo</strong>:</p> |
| 65 | +<p align="center"><iframe width="560" height="315" loading="lazy" src="https://www.youtube.com/embed/vnGeEO3d42U" title="YouTube video player" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe></p> |
| 66 | +<br> |
| 67 | +<p><img src="/images/info.svg" alt="info" /> See <a href="https://learnbyexample.github.io/cli_text_processing_coreutils/paste.html">paste command</a> chapter from my <a href="https://github.com/learnbyexample/cli_text_processing_coreutils">Command line text processing with GNU Coreutils</a> ebook for more details.</p> |
| 68 | +</content> |
| 69 | + </entry> |
10 | 70 | <entry xml:lang="en">
|
11 | 71 | <title>Python tip 31: next() function</title>
|
12 | 72 | <published>2023-07-25T00:00:00+00:00</published>
|
|
0 commit comments