s243a icon

~/Find_Base_Files

s243a | PRO | 09/29/19 03:15:53 AM UTC | 0 ⭐ | 8308 👁️ | Never ⏰ | []
Perl |

5.07 KB

|

None

|

0 👍

/

0 👎

#!/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
        }

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎