Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/gawk -f
- function version_split(version1,version_array,split_chars, i1,remainder1,matches,num1_epoch_split){
- print "version1=" version1
- match(version1,/([[:digit:]])*:(.*|$)/,num1_epoch_split)
- if (length(num1_epoch_split) > 0 ){
- version_array[1]=num1_epoch_split[1]
- remainder1=num1_epoch_split[2]
- } else {
- version_array[1]=0
- remainder1=version1
- }
- delete num1_epoch_split
- split_chars[1]=":"
- i1=2
- #match(remainder1,/^([^+\.\-~:]+)(([+\.~])([^+\.~\-:]+))*((\-)([^+\.~\-:])+)?$/,matches)
- #match(remainder1,/^([^+\.\-~:]+)(([+\.\-~:])(.*))?$/,matches)
- match(remainder1,/^([[:digit:]]+)(([+\.\-~:])(.*))?$/,matches)
- while (length(matches) > 0) {
- version_array[i1]=matches[1]
- print "version_array[" i1 "]=" version_array[i1]
- if (length(matches)>1){
- split_chars[i1]=matches[3]
- print "split_chars[" i1 "]=" split_chars[i1]
- remainder1=matches[4]
- print "remainder1=" remainder1
- #match(remainder1,/^([^+\.\-~:]+)(([+\.\-~:]+)(.*))?$/,matches)
- match(remainder1,/^([[:digit:]]+)(([+\.\-~:]+)(.*))?$/,matches)
- }
- else{
- break
- }
- i1=i1+1
- }
- }
- function v_le(ver_split, val_split, len_ver){
- return v_ge(val_split,ver_split)
- }
- function v_ge(ver_split, val_split, len_ver){
- print "v_ge"
- if (length(ver_split)<length(val_split)){
- len_ver=length(ver_split)
- }
- else{
- len_ver=length(val_split)
- }
- for (i=1; i<=len_ver; i++){
- print "ver_split[" i "]=" ver_split[i]
- print "val_split[" i "]=" val_split[i]
- if ( ver_split[i] < val_split[i] ) return 0
- if ( ver_split[i] > val_split[i] ) return 1
- }
- print "finished ge compare"
- print "length_ver_split=" length(ver_split)
- print "length_val_split=" length(val_split)
- if ( length(ver_split) >= length(val_split) )
- return 1
- else
- return 0
- }
- function v_gt(num1, num2, le){
- ge = v_ge(num2,num1)
- if ( ge == 1 ){
- return 0
- }
- else {
- return 1
- }
- }
- function v_lt(num1, num2){
- return v_gt(num2, num1)
- }
- #An equal-ish functions.
- function v_e(ver_split, val_split, len_ver){
- if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
- else len_ver=length(val_split)
- for (i=1; i<len_ver; i++){
- if (version_array1[i] != version_array2[i])
- return 0
- }
- return 1
- }
- function arry_cmp(version,ops_array,val_array){
- print "test"
- version_split(version,ver_split,ver_split_chars)
- for (i=1; i<=length(ops_array); i++){
- print "Ops_array " ops_array[i] " " val_array[i]
- version_split(val_array[i],val_split,val_split_chars)
- #https://www.gnu.org/software/gawk/manual/gawk.html#Switch-Statement
- switch(ops_array[i]){
- case "<":
- case "lt":
- if (v_lt(ver_split,val_split) == 0 ){
- return 0
- }
- break
- case ">":
- case "gt":
- if (v_gt(ver_split,val_split) == 0 ){
- return 0
- }
- break
- case "<=":
- case "le":
- if (v_le(ver_split,val_split) == 0 ){
- return 0
- }
- break
- case ">=":
- case "ge":
- if (v_ge(ver_split,val_split) == 0 ){
- return 0
- }
- break
- case "==":
- case "e":
- if (v_e(ver_split,val_split) == 0 ){
- return 0
- }
- break
- }
- #https://unix.stackexchange.com/questions/147957/delete-an-array-in-awk
- delete val_split
- delete val_split_chars
- }
- print "returning result=1"
- return 1
- }
- BEGIN{FS="|"
- awk_cmp_ary_op[1]="lt"
- awk_cmp_ary_val[1]="9.10" #"2.1.12"
- }
- {
- #print "wtf"
- if( $2 == "base-files") {
- if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) == 1 ){
- print "printing result 1"
- print
- }
- }
- else{
- match($2,/^(.*[^[:digit:]])([[:digit:]]*$|$)/,pkg_split)
- if ( pkg_split[1] == "base-files" ) {
- if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) == 1 ){
- print "printing result 2"
- print
- }
- }
- }
- delete pkg_split
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement