#!/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
0 B
|👍
/👎
0 B
|👍
/👎