#!/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