чување 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:
| M | transpose | | | 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"
+}