#!/bin/bash # List to table converter # $Id: unix7-list2table.sh 191 2006-03-29 11:07:00Z cactus $ # # (C) 2005 Dr. ERDI Gergo # # See http://cactus.rulez.org/elte/2005-1-unix/#7 for a description of what it does # # Licensed under the GNU General Public License, version 2 function help () { self=`basename $0` cat << EOF Usage: $self [FILE] Formats the list from FILE (or the standard input) into a table Options: -help Display this help message (C) 2005 Dr. ERDI Gergo Version: \$Id: unix7-list2table.sh 191 2006-03-29 11:07:00Z cactus $ EOF exit 0 } function error () { echo ERROR: $@! >&2 exit 1 } function options () { [ -z "$1" ] && return case "$1" in -help) help ;; *) [ $# -gt 1 ] && error "Too many arguments" [ -f "$1" -a -r "$1" ] || error "$1: Unable to open file" exec <"$1" ;; esac } # Itt sincs sok erdekesseg, nyilvan elso blokk specialis eset ("De # eeeen speciaaaalis akarok leeeenniii!"), onnan kinezzuk az elso # sorba a fejleceket, tobbi meg mar sima ugy AWKPROG=' function print_headers() { for (i = 1; i < HEADERNUM; i++) { printf "%s", HEADERS[i] if (i < HEADERNUM - 1) printf " " } print "" } function print_first_line() { for (i = 1; i < HEADERNUM; i++) { printf "%s", FIRSTLINE[i] if (i < HEADERNUM - 1) printf " " } print "" } BEGIN { FIRSTBLOCK = 1 HEADERNUM = 1 FS = ": " } { if (NF == 0) { if (FIRSTBLOCK) { print_headers() print_first_line() } else { print "" } FIRSTBLOCK = 0 ROWNUM = 1 next } if (FIRSTBLOCK) { HEADERS[HEADERNUM] = $1 FIRSTLINE[HEADERNUM] = $2 HEADERNUM++ } else { printf "%s", $2 if (ROWNUM < HEADERNUM - 1) printf " " ROWNUM++ } } END { if (FIRSTBLOCK) { print_headers() print_first_line() } else { print "" } } ' options "$@" awk "$AWKPROG" 2>/dev/null