ste

Једноставни уређивач табела
Дневник | Датотеке | Референце | ПРОЧИТАЈМЕ | ЛИЦЕНЦА

чување 660922c9de3bac076919f14e3aa5a34916e40d96
родитељ c7b55f201d1d2952e865a904ae388250a6307423
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Fri, 25 Aug 2023 20:25:39 +0200

transpose: Convert into awk script, simplify

Signed-off-by: Страхиња Радић <contact@strahinja.org>

Diffstat:
Mtranspose | 70+++++++++++++++++++---------------------------------------------------
измењених датотека: 1, додавања: 19(+), брисања: 51(-)

diff --git a/transpose b/transpose @@ -1,55 +1,23 @@ -#!/bin/sh -# vim: set ft=bash: +#!/usr/bin/awk -f # transpose - Transpose a TSV file # See the file LICENSE for copyright and license details. - -if [ $# -lt 1 ] || [ "$1" = "-h" ] -then - cat <<! >&2 -Usage: ${0##*/} [file] -! - exit 1 -fi - -tmpf=/tmp/transpose.$$ -tmpf_complete=/tmp/transpose.$$.complete -active=1 -colno=1 -input="$1" - -cat "$input" >"$tmpf" - -#shellcheck disable=SC2064 -trap "rm -f \"$tmpf\" \"$tmpf_complete\"" HUP PIPE INT QUIT TERM EXIT - -cols=$(sed 1q "$tmpf" | tr -d -c '\t' | wc -c) -# Fix lines without the necessary number of tabs -awk '{ - line=$0 - gsub("[^\t]","",line) - printf "%s", $0 - if (NR==1) +BEGIN { FS="\t" } +{ + if (cols < NF) + cols = NF + rows = NR + for (x = 1; x <= NF; x++) + table[rows, x] = $x +} +END { + for (x = 1; x <= cols; x++) { - cols = length(line) + for (y = 1; y <= rows; y++) + { + printf "%s", table[y, x] + if (y != rows) + printf "\t" + } + printf "\n" } - else - { - tabs = length(line) - for (i = 0; i < cols - tabs; i++) - printf "\t" - } - printf "\n" -}' < "$tmpf" > "$tmpf_complete" - -while [ $active -eq 1 ] -do - cut -f$colno "$tmpf_complete" | paste -s - colno=$(( colno + 1 )) - if [ "$cols" -eq 0 ] \ - || [ -z "$(cut -f$colno- "$tmpf_complete" | tr -d '\n')" ] - then - active=0 - fi -done - -rm -f "$tmpf" "$tmpf_complete" +}