Advertisement
s243a

AWK_fn

Sep 26th, 2019
541
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 7.82 KB | None | 0 0
  1.          function version_split(version1,version_array,split_chars,       i1,remainder1,matches,num1_epoch_split){
  2.            match(version1,/[[:digit:]]*:(.*|$)/,num1_epoch_split)
  3.            if (length(num1_epoch_split) > 0 ){
  4.              version_array[1]=num1_epoch_split[1]
  5.              remainder1=num1_epoch_split[2]
  6.            } else {
  7.              version_array[1]=0
  8.              remainder1=version1
  9.            }
  10.            split_chars[1]=":"
  11.            i1=2
  12.            match(remainder1,/^([^+\-~:])(([+.~])([^+.~\-:]+))*(([-])([^+.~\-:])+)?$/,matches)  
  13.            version_array[2]=matches[1]
  14.            for (i2 = 4; i<length(matches); i2=i2+3){
  15.              split_chars[i1]=matches[i2]
  16.              i1=i1+1             
  17.              version_array[i1]=matches[i2]           
  18.            }
  19.          }
  20.          function v_gt(ver_split, val_split,       len_ver){
  21.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  22.            else len_ver=length(val_split)        
  23.            for (i=1; i<=len_ver; i++){
  24.              if (ver_split[i] <= val_split[i] ) return 0
  25.            }
  26.            if ( length(ver_split[i]) > length(val_split[i]) )
  27.              return 1
  28.            else
  29.              return 0
  30.          }
  31.          function v_ge(ver_split, val_split,       len_ver){
  32.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  33.            else len_ver=length(val_split)
  34.            for (i=1; i<=len_ver; i++){
  35.              if ( ver_split[i] < val_split[i] ) return 0
  36.            }
  37.            if ( length(ver_split[i]) > length(val_split[i]) )
  38.              return 1
  39.            else
  40.              return 0
  41.          }
  42.          function v_le(num1, num2){
  43.            return v_ge(num2, num1)
  44.          }
  45.          function v_lt(num1, num2){
  46.            return v_gt(num2, num1)
  47.          }
  48.          #An equal-ish functions.
  49.          function v_e(ver_split, val_split,       len_ver){
  50.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  51.            else len_ver=length(val_split)
  52.            for (i=1; i<len_ver; i++){
  53.              if (version_array1[i] != version_array2[i])
  54.                return 0
  55.            }
  56.           return 1
  57.          }
  58.          function arry_cmp(version,ops_array,val_array){
  59.            version_split(version,ver_split,ver_split_chars)      
  60.            for (i=1; i<=length(ops_array); i++){
  61.              version_split(val_array[i],val_split,val_split_chars)   
  62.              #https://www.gnu.org/software/gawk/manual/gawk.html#Switch-Statement
  63.              switch(ops_array[i]){
  64.              case "<":
  65.              case "lt":
  66.                if (v_lt(ver_split,val_split) == 0 ){
  67.                  return 0
  68.                }
  69.                break
  70.              case ">":
  71.              case "gt":
  72.                if (v_gt(ver_split,val_split) == 0 ){
  73.                  return 0
  74.                }
  75.                break
  76.              case "<=":
  77.              case "le":
  78.                if (v_le(ver_split,val_split) == 0 ){
  79.                  return 0
  80.                }
  81.                break           
  82.              case ">=":
  83.              case "ge":
  84.                if (v_ge(ver_split,val_split) == 0 ){
  85.                  return 0
  86.                }
  87.                break           
  88.              case "==":
  89.              case "e":
  90.                if (v_e(ver_split,val_split) == 0 ){
  91.                  return 0
  92.                }
  93.                break           
  94.              }
  95.              #https://unix.stackexchange.com/questions/147957/delete-an-array-in-awk
  96.              delete val_split
  97.              delete val_split_chars
  98.            }
  99.            return result
  100.          }
  101.               BEGIN{FS="|"
  102.          
  103. awk_cmp_ary_op[1]="ge"
  104.          
  105. awk_cmp_ary_val[1]="2.1.12"
  106.         }
  107.         {
  108.           if( $2 == "base-files") {
  109.                           if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
  110.                 print
  111.               }
  112.           }
  113.           else{
  114.             match($2,/^(.*[^[:digit:]])([[:digit:]]*$|$)/,pkg_split)
  115.             if ( pkg_split[1] == "base-files" ) {
  116.                             if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
  117.                 print
  118.               }
  119.             }
  120.           }
  121.           delete pkg_split
  122.         }'
  123. ++ awk '         function version_split(version1,version_array,split_chars,       i1,remainder1,matches,num1_epoch_split){
  124.            match(version1,/[[:digit:]]*:(.*|$)/,num1_epoch_split)
  125.            if (length(num1_epoch_split) > 0 ){
  126.              version_array[1]=num1_epoch_split[1]
  127.              remainder1=num1_epoch_split[2]
  128.            } else {
  129.              version_array[1]=0
  130.              remainder1=version1
  131.            }
  132.            split_chars[1]=":"
  133.            i1=2
  134.            match(remainder1,/^([^+\-~:])(([+.~])([^+.~\-:]+))*(([-])([^+.~\-:])+)?$/,matches)  
  135.            version_array[2]=matches[1]
  136.            for (i2 = 4; i<length(matches); i2=i2+3){
  137.              split_chars[i1]=matches[i2]
  138.              i1=i1+1             
  139.              version_array[i1]=matches[i2]           
  140.            }
  141.          }
  142.          function v_gt(ver_split, val_split,       len_ver){
  143.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  144.            else len_ver=length(val_split)        
  145.            for (i=1; i<=len_ver; i++){
  146.              if (ver_split[i] <= val_split[i] ) return 0
  147.            }
  148.            if ( length(ver_split[i]) > length(val_split[i]) )
  149.              return 1
  150.            else
  151.              return 0
  152.          }
  153.          function v_ge(ver_split, val_split,       len_ver){
  154.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  155.            else len_ver=length(val_split)
  156.            for (i=1; i<=len_ver; i++){
  157.              if ( ver_split[i] < val_split[i] ) return 0
  158.            }
  159.            if ( length(ver_split[i]) > length(val_split[i]) )
  160.              return 1
  161.            else
  162.              return 0
  163.          }
  164.          function v_le(num1, num2){
  165.            return v_ge(num2, num1)
  166.          }
  167.          function v_lt(num1, num2){
  168.            return v_gt(num2, num1)
  169.          }
  170.          #An equal-ish functions.
  171.          function v_e(ver_split, val_split,       len_ver){
  172.            if (length(ver_split)<length(val_split)) len_ver=length(ver_split)
  173.            else len_ver=length(val_split)
  174.            for (i=1; i<len_ver; i++){
  175.              if (version_array1[i] != version_array2[i])
  176.                return 0
  177.            }
  178.           return 1
  179.          }
  180.          function arry_cmp(version,ops_array,val_array){
  181.            version_split(version,ver_split,ver_split_chars)      
  182.            for (i=1; i<=length(ops_array); i++){
  183.              version_split(val_array[i],val_split,val_split_chars)   
  184.              #https://www.gnu.org/software/gawk/manual/gawk.html#Switch-Statement
  185.              switch(ops_array[i]){
  186.              case "<":
  187.              case "lt":
  188.                if (v_lt(ver_split,val_split) == 0 ){
  189.                  return 0
  190.                }
  191.                break
  192.              case ">":
  193.              case "gt":
  194.                if (v_gt(ver_split,val_split) == 0 ){
  195.                  return 0
  196.                }
  197.                break
  198.              case "<=":
  199.              case "le":
  200.                if (v_le(ver_split,val_split) == 0 ){
  201.                  return 0
  202.                }
  203.                break           
  204.              case ">=":
  205.              case "ge":
  206.                if (v_ge(ver_split,val_split) == 0 ){
  207.                  return 0
  208.                }
  209.                break           
  210.              case "==":
  211.              case "e":
  212.                if (v_e(ver_split,val_split) == 0 ){
  213.                  return 0
  214.                }
  215.                break           
  216.              }
  217.              #https://unix.stackexchange.com/questions/147957/delete-an-array-in-awk
  218.              delete val_split
  219.              delete val_split_chars
  220.            }
  221.            return result
  222.          }
  223.               BEGIN{FS="|"
  224.          
  225. awk_cmp_ary_op[1]="ge"
  226.          
  227. awk_cmp_ary_val[1]="2.1.12"
  228.         }
  229.         {
  230.           if( $2 == "base-files") {
  231.                           if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
  232.                 print
  233.               }
  234.           }
  235.           else{
  236.             match($2,/^(.*[^[:digit:]])([[:digit:]]*$|$)/,pkg_split)
  237.             if ( pkg_split[1] == "base-files" ) {
  238.                             if ( arry_cmp($3,awk_cmp_ary_op,awk_cmp_ary_val) ){
  239.                 print
  240.               }
  241.             }
  242.           }
  243.           delete pkg_split
  244.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement