ste

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

чување 4b54344e75155152232bdc099c2854542d2a930b
родитељ 3d57b6b04ea2e27e7fc9d3ee01a552de7b2de1fd
Аутор: Страхиња Радић <contact@strahinja.org>
Датум:   Wed, 16 Aug 2023 20:28:28 +0200

Converted while read -r... into awk script

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

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

diff --git a/transpose b/transpose @@ -15,41 +15,40 @@ tmpf=/tmp/transpose.$$ tmpf_complete=/tmp/transpose.$$.complete active=1 colno=1 -input=$1 +input="$1" -cat "$input" >$tmpf +cat "$input" >"$tmpf" 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 -firstline=1 -while read -r line; do - ntabs=$(echo "$line" | sed 's/[^\t]\+//g' | wc -c) - if [ $firstline -eq 1 ]; then - firstline=0 - if [ "$ntabs" -ge 1 ]; then - max_tabs=$((ntabs-1)) - else - max_tabs=0 - fi - fi - printf "%s" "$line" - i=$((max_tabs-ntabs+1)) - while [ "$i" -gt 0 ]; do - printf '\t' - i=$((i-1)) - done - echo -done < "$tmpf" > "$tmpf_complete" +awk '{ + line=$0 + gsub("[^\t]","",line) + printf "%s", $0 + if (NR==1) + { + cols = length(line) + } + 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 + cut -f$colno "$tmpf_complete" | paste -s colno=$(( colno + 1 )) - if [ $max_tabs -eq 0 ] || \ - [ -z "$(cut -f${colno}- $tmpf_complete | tr -d '\n')" ] + if [ $cols -eq 0 ] \ + || [ -z "$(cut -f$colno- "$tmpf_complete" | tr -d '\n')" ] then active=0 fi done -rm -f $tmpf $tmpf_complete + +rm -f "$tmpf" "$tmpf_complete"