#! /usr/bin/gawk -f # Usage: "multicol [ -v lines=NUM ] FILE... function filedims(name, max, line, len) { # Scans file "name", sets "maxwidth" to the the maximum line length, # sets "numlines" to the number of lines. maxwidth = 0; numlines = 0; while ((numlines < max) && (getline line < name)) { if (ERRNO != 0) { printf "%s: %s\n", name, ERRNO > "/dev/stderr"; exit(1); } numlines++; len = length(line); if (len > maxwidth) { maxwidth = len; } } close(name); } BEGIN { split("", width); split("", height); maxlines = 0; for (i=1; i< ARGC; i++) { filedims(ARGV[i], (lines == 0 ? 9999999 : lines)); width[i] = maxwidth; height[i] = numlines; if (numlines > maxlines) { maxlines = numlines; } } if ((lines != 0) && (maxlines > lines)) { printf "huh?\n" > "/dev/stderr"; exit(1); } # Print file names for (i=1; i< ARGC; i++) { if (i > 1) { printf " "; } printf "%-*s", width[i], ARGV[i]; } printf "\n"; # Print dashed lines for (i=1; i< ARGC; i++) { if (i > 1) { printf " "; } for (r=1; r<=width[i]; r++) { printf "-"; } } printf "\n"; # Print files for (k=1; k <= lines; k++) { for (i=1; i< ARGC; i++) { if (k > height[i]) { line = ""; } else { getline line < ARGV[i]; } if (i > 1) { printf " "; } printf "%-*s", width[i], line; } printf "\n"; } ARGC = 0; exit(0); } /./ { printf "input ignored\n" >> "/dev/stderr"; exit(1); }