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:
Code:
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:
Code:
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.)
Code:
$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
}'
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.
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?
awk is not shell. It does not have shell variables or shell substitutions. If you want shell variables in awk, you have to put them there. If you want substitutions, you'll have to use awk's.
$ means column in awk. That's why $1 gets you column one. Variables are just strings, like VAR=1. You can use an expression as a column number too, like print $(VAR+1) for column 2.
So, to get your variables, into awk, you will have to put them into awk.
Hi, shell variables need to be passed to awk in a different way, for example: awk -v bold="$BOLD" -v rst="$RESET"
The variable can then be accessed as bold and rst
I would try something like this (not tested):
Code:
$AWK '{
bitrate=$3+$4
# pixels =${2/x*/} * ${2/*x/} # When enabling this, i get no output at all -- seems substitution works diffrently for colums. This will not work, parameter expansion is a shell feature, this is awk
print "\t* " bold $1 rst, $2, pixels,$3,$4,bitrate,$5,$6
}' OFS='\t'
Last edited by Scrutinizer; 02-12-2015 at 02:38 PM..
This User Gave Thanks to Scrutinizer For This Post:
To get this right:
Split takes column 2, splits the string at the x's and saves its output in an array(like) variable for later usage.
Sadly, pixels get calculated to 0 but the bold text is working, thank you.
I'm now stuck at further parsing of bitrates, i'd like to put a 'kb' at its end as long bitrates do not exceed 1mb, then 'mb' should be appended.
Also, ext=mb sets ext to blank unless mb happens to be set to something. I think you meant ext="mb"
Try: ext="kb" ; if(value >= 4) ext="mb";
Also, print "BOLD$1RESET" will print the literal words BOLD and RESET and the literal text $1. awk really is a different language than shell, it doesn't substitute inside quotes -- in fact it doesn't substitute, at all, ever. If you want the variables, do print BOLD $1 RESET
Lastly, and most importantly, you forgot to give awk a filename.
FYI,
I'm slowly removing a lot of the bold font-styles from titles of discussions, forum titles, etc
I'm not removing bold for the entire site because we do need bold from time to time, especially in posts and sometimes in other places.
However, the original forum style had way too much... (3 Replies)
Hi expert,
I have log :
TOTAL-TIME : 2125264636
DATA-BYTES-DOWN : 3766111307032
DATA-BYTES-UP : 455032157567
DL = (3766111307032/2125264636)/1024 = 1.73
UL = (455032157567/2125264636)/1024 = 0.21
I want the result :
TOTAL = 1.94 ... (4 Replies)
Hi
main object is categorize the difference of data-values (TLUFT02B - TLUFT12B).
herefor i read out data-files which are named
acording to the timeformat yyyymmddhhmm.
WR030B 266.48 Grad 0
WR050B 271.46 Grad 0
WR120B 268.11 Grad 0
WV030B 2.51 m/s ... (6 Replies)
Based on input
ail,UTT,id1_0,COMBO,21,24,21,19,85
al,UTHAST,id1_0,COMBO,342,390,361,361,1454
and awk code as
awk -F, '{ K=0; for(i=NF; i>=(NF-4); i--) { K=K+$i; J=J+$i;} { print K } } END { for ( l in J ) printf("%s ",J); }'
I'm trying to add columns and lines in single line. line... (6 Replies)
Hi I have this list
592;1;Z:\WB\DOCS;/FS3_100G/FILER112/BU/MPS/DOCS;;;;\\FILER112\BUMPS-DOCS\;580,116,544,878 Bytes;656,561 ;77,560
592;2;Z:\WB\FOCUS;/FS3_100G/FILER112/BU/MPS/FOCUS;;;;\\FILER112\BUMPS-FOCUS\;172,430 Bytes;6 ;0 ... (12 Replies)
hi I want to write a script, while using the SED editor, to output the text, in this case a variable, to the result file but highlighted it in bold, is it possible to do that? can you tell me how?
eg. in text.txt
sed '$ a\
'$variable'
' <text.txt >text2.txt
so it will add the... (2 Replies)
I am trying to do some math, so that I can compare the average of six numbers to a variable.
Here is what it looks like (note that when I divide really big numbers, it isn't a real number):
$ tail -n 6 named.stats | awk -F\, '{print$1}'
1141804
1140566
1139429
1134210
1084682
895045... (3 Replies)
Hi,
My file has 2 fields and millions of lines.
variableStep chrom=Uextra span=25
201 0.5952
226 0.330693
251 0.121004
276 0.0736858
301 0.0646982
326 0.0736858
401 0.2952
426 0.230693
451 0.221004
476 0.2736858
Each field either has a... (6 Replies)