Heya
There is a script which has presets stored in a tab-seperated file.
That script also has $help_text
, which will be shown when called with invalid arguments or -h
.
So i do need to have that file ready, so the help text can get the values out of the file, and print it with the $help_text
.
That works, but i wonder if there is a way to do this with awk, as figured, it seems quite fast and power full, but until now i failed to see actual use for me.
How the relevant code parts look at the moment:
PRESETS=$CONFIG_DIR/presets
BOLD="\033[1m"
RESET="\033[0m"
UNDERLINE="\033[4m"
#
# Check for PRESETS, required for proper help display
#
WritePresetFile() { #
# Write a basic table of the presets
#
cat > "$PRESETS" << EOF
# Label Resolution Pixels Vidbit Audbit Bitrate 1min Comment
# Label Resolution Vidbit Audbit 1min Comment #--># This is for your orientation, the above is to display
scrn resolve 1024 192 ? This is only used for screenrecording
qvga 320x240 240 128 2.8mb Quarter of VGA, mobile devices
hvga 480x320 320 128 3.3mb Half VGA, mobile devices
nhd 640x360 512 192 5.2mb Ninth of HD, mobile devices
vga 640x480 640 192 6.1mb VGA
a-vga 640x480 512 192 5.2mb VGA, optimized for anime cartoons
wvga 768x480 768 192 7.6mb Wide VGA
dvd 720x480 720 256 7.2mb DVD - PAL
wdvd 720x576 800 256 7.7mb DVD-wide - Pal
fwvga 854x480 768 256 7.5mb DVD-wide - NTCS, mobile devices
hd 1280x720 1024 384 10.1mb HD aka HD Ready
a-hd 1280x720 768 384 8.5mb HD, optimized for anime cartoons
fhd 1920x1080 1792 384 16.7mb Full HD
a-fhd 1920x1080 1280 256 12.4mb Full HD, optimized for anime cartoons
qhd 2560x1440 3072 448 26.9mb Quad HD - 4xHD
uhd 3840x2160 5120 512 43.4mb 4K, Ultra HD TV
EOF
}
[ -f "$PRESETS" ] || \
WritePresetFile
#
# The whole subshell is what i currently use.
#
# help_text=" .....
# ...
$(
printf "\t$UNDERLINE ";$SED s,"#",, "$PRESETS" | $GREP Pix
printf "$TUI_RESET"
$GREP -v Audbit "$PRESETS" | \
while read label res vidbit audbit siz comment
do
if [ ! $label = scrn ]
then pixels=$[ ${res/x*/} * ${res/*x/} ]
# [ ${#pixels} -gt 9 ] && \
# dot=${pixels:0:( - 8 )} && \
# pixels="${pixels:0:(-9)}.${dot:0:1}bil"
# [ ${#pixels} -gt 6 ] && \
# dot=${pixels:0:( - 5 )} && \
# pixels="${pixels:0:(-6)}.${dot:0:1}mil"
#[ $pixels -eq 0 ] && pixels="0 "
if [ ${#pixels} -gt 6 ]
then dot_cut=5
cut=6
ext=mil
elif [ ${#pixels} -ge 4 ]
then dot_cut=2
cut=3
ext=k
elif [ ${#pixels} -le 3 ]
then dot_cut=""
cut=""
ext=""
fi
[ ! -z "$dot_cut" ] && \
dot="${pixels:0:(-$dot_cut )}" && \
pixels="${pixels:0:(-$cut)}.${dot:0:1}$ext" || \
pixels="${pixels}$ext"
bitrate=$[ $vidbit + $audbit ]
#echo ${#bitrate} $bitrate
if [ ${#bitrate} -gt 6 ]
then dot_cut=5
cut=6
ext=gb
elif [ ${#bitrate} -ge 4 ]
then dot_cut=2
cut=3
ext=mb
elif [ ${#bitrate} -le 3 ]
then dot_cut=""
cut=""
ext=kb
fi
[ HD = "${comment:0:2}" ] && \
comment="${BOLD}HD${RESET}${comment:2}"
[ ! -z "$dot_cut" ] && \
dot="${bitrate:0:( - $dot_cut )}" && \
bitrate="${bitrate:0:(-$cut)}.${dot:(${#dot} - 1):1}$ext" || \
bitrate="${bitrate}$ext"
printf "\t* ${BOLD}$label${RESET}\t$res \t$pixels\t$vidbit\t$audbit\t~$bitrate\t$siz\t$comment\n"
fi
done
)
"
Which then should output like:
Label Resolution Pixels Vidbit Audbit Bitrate 1min Comment
* qvga 320x240 76.7k 240 128 ~368kb 2.8mb Quarter of VGA, mobile devices
* hvga 480x320 153.1k 320 128 ~448kb 3.3mb Half VGA, mobile devices
* nhd 640x360 230.2k 512 192 ~704kb 5.2mb Ninth of HD, mobile devices
* vga 640x480 307.3k 640 192 ~832kb 6.1mb VGA
* a-vga 640x480 307.3k 512 192 ~704kb 5.2mb VGA, optimized for anime cartoons
* wvga 768x480 368.3k 768 192 ~960kb 7.6mb Wide VGA
* dvd 720x480 345.3k 720 256 ~976kb 7.2mb DVD - PAL
* wdvd 720x576 414.4k 800 256 ~1.0mb 7.7mb DVD-wide - Pal
* fwvga 854x480 409.4k 768 256 ~1.0mb 7.5mb DVD-wide - NTCS, mobile devices
* hd 1280x720 921.9k 1024 384 ~1.4mb 10.1mb HD aka HD Ready
* a-hd 1280x720 921.9k 768 384 ~1.1mb 8.5mb HD, optimized for anime cartoons
* fhd 1920x1080 2.2mil 1792 384 ~2.1mb 16.7mb Full HD
* a-fhd 1920x1080 2.2mil 1280 256 ~1.5mb 12.4mb Full HD, optimized for anime cartoons
* qhd 2560x1440 3.3mil 3072 448 ~3.5mb 26.9mb Quad HD - 4xHD
* uhd 3840x2160 8.8mil 5120 512 ~5.6mb 43.4mb 4K, Ultra HD TV
The bold HD in the comments are absolute optional, but a nice to have.
What i have so far:
(actualy had a better code last night, but since i failed with the bold thing, i just kept the above solution.)
$GREP -v "#" "$PRESETS" | $AWK '{
bitrate=$3+$4
#pixels =${2/x*/} * ${2/*x/} # When enabling this, i get no output at all -- seems substitution works diffrently for colums.
print "\t* $BOLD"$1"$RESET\t"$2"\t"pixels"\t"$3"\t"$4"\t"bitrate"\t"$5"\t"$6
}'
Which looks like:
Label Resolution Pixels Vidbit Audbit Bitrate 1min Comment
* ${BOLD}scrn$RESET resolve 1024 192 1216 ? This
* ${BOLD}qvga$RESET 320x240 240 128 368 2.8mb Quarter
* ${BOLD}hvga$RESET 480x320 320 128 448 3.3mb Half
* ${BOLD}nhd$RESET 640x360 512 192 704 5.2mb Ninth
* ${BOLD}vga$RESET 640x480 640 192 832 6.1mb VGA
* ${BOLD}a-vga$RESET 640x480 512 192 704 5.2mb VGA,
* ${BOLD}wvga$RESET 768x480 768 192 960 7.6mb Wide
* ${BOLD}dvd$RESET 720x480 720 256 976 7.2mb DVD
* ${BOLD}wdvd$RESET 720x576 800 256 1056 7.7mb DVD-wide
* ${BOLD}fwvga$RESET 854x480 768 256 1024 7.5mb DVD-wide
* ${BOLD}hd$RESET 1280x720 1024 384 1408 10.1mb HD
* ${BOLD}a-hd$RESET 1280x720 768 256 1024 8.5mb HD,
* ${BOLD}fhd$RESET 1920x1080 1792 384 2176 16.7mb Full
* ${BOLD}a-fhd$RESET 1920x1080 1280 256 1536 12.4mb Full
* ${BOLD}qhd$RESET 2560x1440 3072 448 3520 26.9mb Quad
* ${BOLD}uhd$RESET 3840x2160 5120 512 5632 43.4mb 4K,
First question, can i make bold text with awk print?
Second question, is about the math and substitution, i've seen that gsub be used, but i fail to understand - how.
Using an example from another thread:
'{x=substr($0,N+1); gsub(".","*",x); print substr($0,1,N) x}' N=3
I get the feeling, somehow awk reads from right to left, rather then left to right, like bash.
Anyway, as last N gets set to 3, so substr can subtract it on print, but what is that 1 and $0 (colum 0, does that mean the whole line?) doing there?
Also on the first x=substr, again column 0... and N gets increased to 4??
Third question, how do i get the rest of the comments displayed?
Thank you