s243a icon

AWK_fn

s243a | PRO | 09/26/19 12:36:56 PM UTC | 0 ⭐ | 8772 👁️ | Never ⏰ | []
Perl |

7.82 KB

|

None

|

0 👍

/

0 👎

         function version_split(version1,version_array,split_chars,       i1,remainder1,matches,num1_epoch_split){
           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
           }
           split_chars[1]=":"
           i1=2
           match(remainder1,/^([^+\-~:])(([+.~])([^+.~\-:]+))*(([-])([^+.~\-:])+)?$/,matches)   
           version_array[2]=matches[1] 
           for (i2 = 4; i<length(matches); i2=i2+3){
             split_chars[i1]=matches[i2]
             i1=i1+1             
             version_array[i1]=matches[i2]           
           }
         }
         function v_gt(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 (ver_split[i] <= val_split[i] ) return 0
           }
           if ( length(ver_split[i]) > length(val_split[i]) )
             return 1
           else
             return 0 
         }
         function v_ge(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 ( ver_split[i] < val_split[i] ) return 0
           }
           if ( length(ver_split[i]) > length(val_split[i]) )
             return 1
           else
             return 0 
         }
         function v_le(num1, num2){
           return v_ge(num2, num1)
         }
         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){
           version_split(version,ver_split,ver_split_chars)      
           for (i=1; i<=length(ops_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
           }
           return result
         }
              BEGIN{FS="|"
         
awk_cmp_ary_op[1]="ge"
         
awk_cmp_ary_val[1]="2.1.12"
        }
        {
          if( $2 == "base-files") {
                          if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
                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) ){
                print
              }
            }
          }
          delete pkg_split
        }'
++ awk '         function version_split(version1,version_array,split_chars,       i1,remainder1,matches,num1_epoch_split){
           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
           }
           split_chars[1]=":"
           i1=2
           match(remainder1,/^([^+\-~:])(([+.~])([^+.~\-:]+))*(([-])([^+.~\-:])+)?$/,matches)   
           version_array[2]=matches[1] 
           for (i2 = 4; i<length(matches); i2=i2+3){
             split_chars[i1]=matches[i2]
             i1=i1+1             
             version_array[i1]=matches[i2]           
           }
         }
         function v_gt(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 (ver_split[i] <= val_split[i] ) return 0
           }
           if ( length(ver_split[i]) > length(val_split[i]) )
             return 1
           else
             return 0 
         }
         function v_ge(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 ( ver_split[i] < val_split[i] ) return 0
           }
           if ( length(ver_split[i]) > length(val_split[i]) )
             return 1
           else
             return 0 
         }
         function v_le(num1, num2){
           return v_ge(num2, num1)
         }
         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){
           version_split(version,ver_split,ver_split_chars)      
           for (i=1; i<=length(ops_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
           }
           return result
         }
              BEGIN{FS="|"
         
awk_cmp_ary_op[1]="ge"
         
awk_cmp_ary_val[1]="2.1.12"
        }
        {
          if( $2 == "base-files") {
                          if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
                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) ){
                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

    |

    👍

    /

    👎