Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement