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