Groups | Search | Server Info | Login | Register


Groups > comp.lang.awk > #10035

Side-by-Side

From Michael Sanders <porkchop@invalid.foo>
Newsgroups comp.lang.awk
Subject Side-by-Side
Date 2025-10-24 14:28 +0000
Organization A noiseless patient Spider
Message-ID <10dg2ep$2l1qo$1@dont-email.me> (permalink)

Show all headers | View raw


#!/bin/sh

<<'NOTES'

Prints text blocks side-by-side

Michael Sanders 2025

You have...

A.TXT

Lorem  ipsum  dolor  sit  amet,
consectetuer  adipiscing  elit.
Nullam   feugiat,   turpis   at
pulvinar vulputate, erat libero
tristique  tellus, nec bibendum
odio   risus   sit  amet  ante.

B.TXT

Aliquam   erat  volutpat.  Nunc
auctor.  Mauris pretium quam et
urna.  Fusce  nibh. Duis risus.
Curabitur   sagittis  hendrerit
ante.  Aliquam  erat  volutpat.
Vestibulum metus  semper nulla.

You want...

Left Side                         Right Side

Lorem  ipsum  dolor  sit  amet,   Aliquam   erat  volutpat.  Nunc
consectetuer  adipiscing  elit.   auctor.  Mauris pretium quam et
Nullam   feugiat,   turpis   at   urna.  Fusce  nibh. Duis risus.
pulvinar vulputate, erat libero   Curabitur   sagittis  hendrerit
tristique  tellus, nec bibendum   ante.  Aliquam  erat  volutpat.
odio   risus   sit  amet  ante.   Vestibulum metus  semper nulla.

NOTES

str1="$(cat a.txt)"
str2="$(cat b.txt)"

clear

awk -v gap=3 -v a="$str1" -v b="$str2" '
BEGIN {
    # split strings into lines
    n1 = split(a, arr1, "\n")
    n2 = split(b, arr2, "\n")
    n  = (n1 > n2 ? n1 : n2)

    # determine max width of 1st block
    max = 0
    for (q = 1; q <= n1; q++) {
        if (length(arr1[q]) > max) max = length(arr1[q])
    }

    # print side-by-side
    for(q = 1; q <= n; q++){
        s1 = (q <= n1 ? arr1[q] : "")
        s2 = (q <= n2 ? arr2[q] : "")
        # left-align 1st block with max, add uniform gap, print 2nd block
        printf "%-*s", max + gap, s1
        printf "%s\n", s2
    }
}'

echo

# eof

-- 
:wq
Mike Sanders

Back to comp.lang.awk | Previous | NextNext in thread | Find similar


Thread

Side-by-Side Michael Sanders <porkchop@invalid.foo> - 2025-10-24 14:28 +0000
  Re: Side-by-Side Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2025-10-24 17:19 +0200
    Re: Side-by-Side Michael Sanders <porkchop@invalid.foo> - 2025-10-25 00:26 +0000
      Re: Side-by-Side Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2025-10-25 03:03 +0200
        Re: Side-by-Side Michael Sanders <porkchop@invalid.foo> - 2025-10-26 07:56 +0000
      Re: Side-by-Side mack@the-knife.org (Mack The Knife) - 2025-10-25 17:25 +0000
        Re: Side-by-Side Michael Sanders <porkchop@invalid.foo> - 2025-10-26 07:50 +0000

csiph-web