Advertisement
s243a

PKGS_Reduce.awk

Jan 12th, 2021
1,266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.92 KB | None | 0 0
  1. #!/usr/bin/gawk -f
  2. function merge_line(a_line){
  3.     line=a_line
  4.    #print "line=" line
  5.     split(line, fields , OFS)
  6.       if (length(pkgfile) == 0){
  7.         pkgfile=fields[4]
  8.       }    
  9.     if ( length(filelist) == 0 ){
  10.       filelist=fields[6]
  11.     }              
  12.        if ( length(arch) == 0 ){
  13.           if (length(fields[2]) != 0){
  14.             arch=fields[2]          
  15.           } else {
  16.             if ( length(pkgfile) != 0 ){
  17.               arch=gensub(/^(.+_.+_)(.+)([.]deb)$/,"\\2","g",pkgfile)
  18.               if ( length(arch) == 0 ){
  19.                 arch=match_arch(pkgfile)          
  20.               }
  21.             } else if ( filelist != 0 ){
  22.               arch=match_arch(filelist)
  23.             }    
  24.         }
  25.       }
  26.  
  27.        
  28.     if ( length(pkg) == 0 ){
  29.       pkg=fields[8]
  30.     }
  31.     if ( length(ver) == 0 ){
  32.       ver=fields[3]
  33.     }
  34.     if ( length(dir_name) == 0 ){
  35.       dir_name=fields[5]
  36.     }      
  37.  
  38.     if ( length(md5sum) == 0 ){
  39.       md5sum=fields[7]
  40.     }  
  41.     if ( length(pkgfile_noExt) == 0 ){
  42.       pkgfile_noExt=fields[1]
  43.     }                        
  44.   }
  45.     #We don't need to do the following since it is the key.
  46.     #if ( length(pkgfile_noEx) == 0 ){
  47.     #  pkgfile_noExt=pkgfile
  48.     #  pkgfile_noExt=sub(/\.[^.]+$/, "", pkgfile_noExt)
  49.     #}    
  50.     if ( length(pkg) == 0 ){
  51.       pkg=pkgfile_noExt
  52.     }  
  53. }
  54. function match_arch_exact(a_field,      arch){
  55.               switch (a_field){
  56.               case /[_\-.]i686[_\-.]/:
  57.                  a_arch="i686"; break
  58.               case /[_\-.]i586[_\-.]/:
  59.                  a_arch="i586"; break
  60.               case /[_\-.]i486[_\-.]/:
  61.                  a_arch="i486"; break                                              
  62.               case /[_\-.]i386[_\-.]/:
  63.                  a_arch="i386"; break
  64.                case /[_\-.]x86_64[_\-.]/:
  65.                  a_arch="x86_64"; break                
  66.               case /[_\-.]amd64[_\-.]/:
  67.                  a_arch="amd64"; break
  68.               case /[_\-.]amd64[_\-.]/:
  69.                  a_arch="amd64"; break
  70.               case /[_\-.] armhf[_\-.]/:
  71.                  a_arch="armhf"; break
  72.               case /[_\-.]armel[_\-.]/:
  73.                  a_arch="armel"; break
  74.               default:
  75.                 a_arch=""; break
  76.               }
  77.         return a_arch
  78. }
  79. functionstripArch(a_field){
  80.     a_arch=match_arch_exact(a_field)
  81. }
  82. function match_arch(a_field,      a_arch){
  83.               switch (a_field){
  84.               case /[_\-.]i686[_\-.]/:
  85.                  #a_arch="i686"; break
  86.               case /[_\-.]i586[_\-.]/:
  87.                  #a_arch="i586"; break
  88.               case /[_\-.]i486[_\-.]/:
  89.                  #a_arch="i486"; break                                              
  90.               case /[_\-.]i386[_\-.]/:
  91.                  a_arch="i386"; break
  92.                case /[_\-.]x86_64[_\-.]/:
  93.                  #a_arch="x86_64"; break                
  94.               case /[_\-.]amd64[_\-.]/:
  95.                  a_arch="amd64"; break
  96.               case /[_\-.]amd64[_\-.]/:
  97.                  a_arch="amd64"; break
  98.               case /[_\-.] armhf[_\-.]/:
  99.                  a_arch="armhf"; break
  100.               case /[_\-.]armel[_\-.]/:
  101.                  a_arch="armel"; break
  102.               default:
  103.                 a_arch=""; break
  104.               }
  105.         return arch
  106. }
  107. BEGIN {
  108.     if (length(shuffle_OFS)>0){
  109.       FS=shuffle_OFS
  110.     } else
  111.     {
  112.       FS="@@@@"
  113.     }
  114.     if (length(shuffle_FS)>0){
  115.       OFS=shuffle_FS
  116.     }  else {
  117.       OFS = "|"
  118.     }
  119. }
  120. {  #f1=pkgfile_noExt     |f2=arch        |f3=ver     |f4=pkgfile               |f5=dir_name                   |f6=filelist                     |f7=md5sum                       |pkg
  121.     #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
  122.     #adb_8.1.0+r23-5     |               |           |                         |packages|adb_8.1.0+r23-5.files                                 |00fe8bb85ae24f00fff63bdfbd9464ea|
  123.   #filelist "|" md5sum "|" dir_name "|" pkg "|" arch "|" ver "|" pkgfile
  124.   #split($0, lines , FS)
  125.   pkg=""; arch=""; ver=""; pkgfile=""; f5=dir_name=""; f6=filelist=""; md5sum=""; pkgfile_noExt=""
  126.   if (NF==1){
  127.     line=$i
  128.     last_byarch[arch]=line
  129.     split(line, fields , OFS)
  130.     pkgfile_noExt=fields[1]
  131.     pkgfile_noExt_noArch=stripArch(pkgfile_noExt)
  132.     if (! $1 in  last_bykey){
  133.       last_bykey[pkgfile_noExt_noArch]=line
  134.     } else {
  135.       last_bykey[pkgfile_noExt_noArch]=last_bykey[pkgfile_noExt_noArch] FS line
  136.     }
  137.   } else if (NF>1){
  138.     for(i=1; i<=NF; i++){
  139.       line=$i
  140.       merge_line($1)
  141.     }
  142.   }
  143.   print pkg, arch, ver, pkgfile, dir_name, filelist, md5sum,pkgfile_noExt
  144. }
  145. #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
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement