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(val_split[i]) ) return 1 else return 0 } function v_ge(ver_split, val_split, len_ver){ if (length(ver_split) 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)": 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(val_split[i]) ) return 1 else return 0 } function v_ge(ver_split, val_split, len_ver){ if (length(ver_split) 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)": 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 }