#!/usr/bin/gawk -f
function merge_line(a_line){
line=a_line
#print "line=" line
split(line, fields , OFS)
if (length(pkgfile) == 0){
pkgfile=fields[4]
}
if ( length(filelist) == 0 ){
filelist=fields[6]
}
if ( length(arch) == 0 ){
if (length(fields[2]) != 0){
arch=fields[2]
} else {
if ( length(pkgfile) != 0 ){
arch=gensub(/^(.+_.+_)(.+)([.]deb)$/,"\\2","g",pkgfile)
if ( length(arch) == 0 ){
arch=match_arch(pkgfile)
}
} else if ( filelist != 0 ){
arch=match_arch(filelist)
}
}
}
if ( length(pkg) == 0 ){
pkg=fields[8]
}
if ( length(ver) == 0 ){
ver=fields[3]
}
if ( length(dir_name) == 0 ){
dir_name=fields[5]
}
if ( length(md5sum) == 0 ){
md5sum=fields[7]
}
if ( length(pkgfile_noExt) == 0 ){
pkgfile_noExt=fields[1]
}
}
#We don't need to do the following since it is the key.
#if ( length(pkgfile_noEx) == 0 ){
# pkgfile_noExt=pkgfile
# pkgfile_noExt=sub(/\.[^.]+$/, "", pkgfile_noExt)
#}
if ( length(pkg) == 0 ){
pkg=pkgfile_noExt
}
}
function match_arch_exact(a_field, arch){
switch (a_field){
case /[_\-.]i686[_\-.]/:
a_arch="i686"; break
case /[_\-.]i586[_\-.]/:
a_arch="i586"; break
case /[_\-.]i486[_\-.]/:
a_arch="i486"; break
case /[_\-.]i386[_\-.]/:
a_arch="i386"; break
case /[_\-.]x86_64[_\-.]/:
a_arch="x86_64"; break
case /[_\-.]amd64[_\-.]/:
a_arch="amd64"; break
case /[_\-.]amd64[_\-.]/:
a_arch="amd64"; break
case /[_\-.] armhf[_\-.]/:
a_arch="armhf"; break
case /[_\-.]armel[_\-.]/:
a_arch="armel"; break
default:
a_arch=""; break
}
return a_arch
}
functionstripArch(a_field){
a_arch=match_arch_exact(a_field)
}
function match_arch(a_field, a_arch){
switch (a_field){
case /[_\-.]i686[_\-.]/:
#a_arch="i686"; break
case /[_\-.]i586[_\-.]/:
#a_arch="i586"; break
case /[_\-.]i486[_\-.]/:
#a_arch="i486"; break
case /[_\-.]i386[_\-.]/:
a_arch="i386"; break
case /[_\-.]x86_64[_\-.]/:
#a_arch="x86_64"; break
case /[_\-.]amd64[_\-.]/:
a_arch="amd64"; break
case /[_\-.]amd64[_\-.]/:
a_arch="amd64"; break
case /[_\-.] armhf[_\-.]/:
a_arch="armhf"; break
case /[_\-.]armel[_\-.]/:
a_arch="armel"; break
default:
a_arch=""; break
}
return arch
}
BEGIN {
if (length(shuffle_OFS)>0){
FS=shuffle_OFS
} else
{
FS="@@@@"
}
if (length(shuffle_FS)>0){
OFS=shuffle_FS
} else {
OFS = "|"
}
}
{ #f1=pkgfile_noExt |f2=arch |f3=ver |f4=pkgfile |f5=dir_name |f6=filelist |f7=md5sum |pkg
#adb_8.1.0+r23-5_i386| |8.1.0+r23-5|adb_8.1.0+r23-5_i386.deb |packages |adb_8.1.0+r23-5_i386.files | |adb
#adb_8.1.0+r23-5 | | | |packages|adb_8.1.0+r23-5.files |00fe8bb85ae24f00fff63bdfbd9464ea|
#filelist "|" md5sum "|" dir_name "|" pkg "|" arch "|" ver "|" pkgfile
#split($0, lines , FS)
pkg=""; arch=""; ver=""; pkgfile=""; f5=dir_name=""; f6=filelist=""; md5sum=""; pkgfile_noExt=""
if (NF==1){
line=$i
last_byarch[arch]=line
split(line, fields , OFS)
pkgfile_noExt=fields[1]
pkgfile_noExt_noArch=stripArch(pkgfile_noExt)
if (! $1 in last_bykey){
last_bykey[pkgfile_noExt_noArch]=line
} else {
last_bykey[pkgfile_noExt_noArch]=last_bykey[pkgfile_noExt_noArch] FS line
}
} else if (NF>1){
for(i=1; i<=NF; i++){
line=$i
merge_line($1)
}
}
print pkg, arch, ver, pkgfile, dir_name, filelist, md5sum,pkgfile_noExt
}
#fonts-arphic-gbsn00lp_2.11-15_all||2.11-15|fonts-arphic-gbsn00lp_2.11-15_all.deb|packages|fonts-arphic-gbsn00lp_2.11-15_all.files||fonts-arphic-gbsn00lp
Comments