#!/bin/ash outfile=~/testcat.in #cat_file=/usr/local/petget/categories.dat cat_file=~/cat_test_cat.dat . ~/build_cannonical awk -v PKGOS="$distro" -v PKGOSVER="$distro_ver" -v CATFILE="$cat_file" -v ALIASFILE="$alias_file" \ 'function fixdepends(s, p,a,sout) { split(s,a,",") for (p in a) { sout = sout ",+" a[p] } sub(/^,/,"",sout) ; return sout; } function parse_pkg_name(s, txz_split,arch_build){ match(s,/^([^\-]*)(\-.*)(\.([^\-]+))$/,txz_split) PKG=txz_split[1] split(txz_split[2],ver_arch_build,"-") PKGVER=ver_arch_build[2] len=length(ver_arch_build) if (len == 4){ BUILD_NO=ver_arch_build[4] ARCH=ver_arch_build[3] } else if(len == 3){ if (ver_arch_build[len-1] ~ /^[0-9]+$/){ BUILD_NO=ver_arch_build[2] } else{ ARCH=ver_arch_build[3] } } } function maybe_parse_dec(s, line_split){ if( PARSE_DEC_FLAG == 1){ match($0,/(\S+):\s+(.*)$/,line_split) if(length(line_split) > 0){ if (line_split[1] == PKG){ PKGINFO=substr(line_split[2],1,200) PARSE_DEC_FLAG=0 } } } } function cat_fallback(s){ switch(s){ case /vcs.*/: return "Utility;development" break case /doc.*/: return "Help" break case /admin.*/: return "Setup" break case /games.*/: return "Fun" break case /.{7,}/: return "science" break default: return "BuildingBlock" break } } function parse_cats(s){ i=index(s,"=") if (i>0){ #catagory=( package1 package2 ... packageN) category=substr(s,i-1) sub(/PKGCAT_/,"",category) #e.g. category=PKGCAT_Utility => category=Utility sub(/_/,";",category) #e.g. category=Filesystem_filemanager => category=Filesystem;filemanager #e.g catagory=( package1 package2 ... packageN) => package1 package2 ... packageN gensub(/^([^=]+="\s)(.*)(\s*"\s*)$/,"\\2","g",s) split(s,pkg_names" ") for (pkg in pkg_names){ pkg_categories[pkg]=category } } }'\ "$ALIAS_FNS"\ 'BEGIN { init_CANONICAL_ARY() #MAPS a PKG NAME to a canonical name } FILENAME = ALIASFILE { FILENAME = CATFILE {parse_cats($0) next} #https://www3.physnet.uni-hamburg.de/physnet/Tru64-Unix/HTML/APS32DTE/WKXXXXXX.HTM /^PACKAGE NAME:/ { sub(/^PACKAGE NAME:\s*/,""); PKGFILE=$0; parse_pkg_name($0); } /^PACKAGE LOCATION:/ { sub(/^PACKAGE LOCATION:\s*/,""); sub(/^(.\/)?/,""); PKGPATH=$0; } /^PACKAGE SIZE \(uncompressed\):/ { sub(/^PACKAGE SIZE \(uncompressed\):\s*/,""); sub(/\s/,""); PKGSIZE=$0; } /^PACKAGE DESCRIPTION:/ { PARSE_DEC_FLAG=1} /^PACKAGE REQUIRED:/ { sub(/^PACKAGE REQUIRED:\s*/,""); PKGDEP=fixdepends($0); } {maybe_parse_dec($0)} /^$/ { if (length(PKG)>1){ print PKG "_" PKGVER "|" PKG "|" PKGVER "|" BUILD_NO "|" PKGSECTION "|" PKGSIZE "|" PKGPATH "|" PKGFILE "|" PKGDEP "|" PKGINFO "|" PKGOS "|" PKGOSVER "|" }; PKG=""; PKGVER=""; PKGSECTION="CATEGORY"; PKGSIZE=""; PKGFILE=""; PKGPATH=""; PKGDEP=""; PKGINFO=""; PKGPRIO=""; BUILD_NO=""; ARCH=""; PARSE_DEC_FLAG=0; } ' "$alias_file" "$cat_file" #cat "$cat_file"