s243a

~/Find_Base_Files

Sep 28th, 2019
982
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.07 KB | None | 0 0
  1. #!/usr/bin/gawk -f
  2.          function version_split(version1,version_array,split_chars,       i1,remainder1,matches,num1_epoch_split){
  3.            print "version1=" version1
  4.            match(version1,/([[:digit:]])*:(.*|$)/,num1_epoch_split)
  5.            if (length(num1_epoch_split) > 0 ){
  6.              version_array[1]=num1_epoch_split[1]
  7.              remainder1=num1_epoch_split[2]
  8.            } else {
  9.              version_array[1]=0
  10.              remainder1=version1
  11.            }
  12.            delete num1_epoch_split
  13.            split_chars[1]=":"
  14.            i1=2
  15.            #match(remainder1,/^([^+\.\-~:]+)(([+\.~])([^+\.~\-:]+))*((\-)([^+\.~\-:])+)?$/,matches)  
  16.            #match(remainder1,/^([^+\.\-~:]+)(([+\.\-~:])(.*))?$/,matches)
  17.            match(remainder1,/^([[:digit:]]+)(([+\.\-~:])(.*))?$/,matches)          
  18.            while (length(matches) > 0) {
  19.              version_array[i1]=matches[1]  
  20.              print "version_array[" i1 "]=" version_array[i1]      
  21.              if (length(matches)>1){      
  22.                split_chars[i1]=matches[3]
  23.                print "split_chars[" i1 "]=" split_chars[i1]
  24.                remainder1=matches[4]
  25.                print "remainder1=" remainder1
  26.                #match(remainder1,/^([^+\.\-~:]+)(([+\.\-~:]+)(.*))?$/,matches)
  27.                match(remainder1,/^([[:digit:]]+)(([+\.\-~:]+)(.*))?$/,matches)
  28.              }
  29.              else{
  30.                break
  31.              }     
  32.                    
  33.              i1=i1+1                                     
  34.            }
  35.          }
  36.          function v_le(ver_split, val_split,       len_ver){
  37.            return v_ge(val_split,ver_split)
  38.          }
  39.          function v_ge(ver_split, val_split,       len_ver){
  40.            print "v_ge"
  41.            if (length(ver_split)<length(val_split)){
  42.              len_ver=length(ver_split)
  43.            }
  44.            else{
  45.             len_ver=length(val_split)
  46.            }
  47.            for (i=1; i<=len_ver; i++){
  48.              print "ver_split[" i "]=" ver_split[i]
  49.              print "val_split[" i "]=" val_split[i]
  50.              if ( ver_split[i] < val_split[i] ) return 0
  51.              if ( ver_split[i] > val_split[i] ) return 1
  52.            }
  53.            print "finished ge compare"
  54.            print "length_ver_split=" length(ver_split)
  55.            print "length_val_split=" length(val_split)
  56.            if ( length(ver_split) >= length(val_split) )
  57.              return 1
  58.            else
  59.              return 0
  60.          }
  61.          function v_gt(num1, num2,    le){
  62.            ge = v_ge(num2,num1)
  63.            if ( ge == 1 ){
  64.              return 0
  65.            }
  66.            else {
  67.              return 1
  68.            }
  69.          }
  70.          function v_lt(num1, num2){
  71.            return v_gt(num2, num1)
  72.          }
  73.          #An equal-ish functions.
  74.          function v_e(ver_split, val_split,       len_ver){
  75.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  76.            else len_ver=length(val_split)
  77.            for (i=1; i<len_ver; i++){
  78.              if (version_array1[i] != version_array2[i])
  79.                return 0
  80.            }
  81.           return 1
  82.          }
  83.          function arry_cmp(version,ops_array,val_array){
  84.            print "test"
  85.            version_split(version,ver_split,ver_split_chars)      
  86.            for (i=1; i<=length(ops_array); i++){
  87.              print "Ops_array " ops_array[i] " " val_array[i]
  88.              version_split(val_array[i],val_split,val_split_chars)   
  89.              #https://www.gnu.org/software/gawk/manual/gawk.html#Switch-Statement
  90.              switch(ops_array[i]){
  91.              case "<":
  92.              case "lt":
  93.                if (v_lt(ver_split,val_split) == 0 ){
  94.                  return 0
  95.                }
  96.                break
  97.              case ">":
  98.              case "gt":
  99.                if (v_gt(ver_split,val_split) == 0 ){
  100.                  return 0
  101.                }
  102.                break
  103.              case "<=":
  104.              case "le":
  105.                if (v_le(ver_split,val_split) == 0 ){
  106.                  return 0
  107.                }
  108.                break           
  109.              case ">=":
  110.              case "ge":
  111.                if (v_ge(ver_split,val_split) == 0 ){
  112.                  return 0
  113.                }
  114.                break           
  115.              case "==":
  116.              case "e":
  117.                if (v_e(ver_split,val_split) == 0 ){
  118.                  return 0
  119.                }
  120.                break           
  121.              }
  122.              #https://unix.stackexchange.com/questions/147957/delete-an-array-in-awk
  123.              delete val_split
  124.              delete val_split_chars
  125.            }
  126.            print "returning result=1"
  127.            return 1
  128.          }
  129.               BEGIN{FS="|"
  130.          
  131. awk_cmp_ary_op[1]="lt"
  132.          
  133. awk_cmp_ary_val[1]="9.10" #"2.1.12"
  134.         }
  135.         {
  136.           #print "wtf"
  137.           if( $2 == "base-files") {
  138.                           if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) == 1 ){
  139.                  print "printing result 1"                            
  140.                 print
  141.               }
  142.           }
  143.           else{
  144.             match($2,/^(.*[^[:digit:]])([[:digit:]]*$|$)/,pkg_split)
  145.             if ( pkg_split[1] == "base-files" ) {
  146.                             if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) == 1 ){
  147.                 print "printing result 2"            
  148.                 print
  149.               }
  150.             }
  151.           }
  152.           delete pkg_split
  153.         }
Advertisement
Add Comment
Please, Sign In to add comment