UFFICIALE L'OT di Linux e altri OS

Pubblicità
ti posto tutto il papocchio, alla fine ho risolto con awk, basta che tu lo trovi..(ok da riga 36 a 48) nel modo in cui funziona tutto lo 'scriptino'::fumato:
probabilmente riesco a eliminare il ricorso a un file ('risultato') ma dovrei buttare giù dell'altro codice con un array ma non mi va, se pensi possa esserci qualcosa di più semplice affida pure liberamente i tuoi pensieri in quest'assise telematica.:sisi:
Codice:
#!/bin/bash

###gestione archivio libri
###by rebellion
###c'è un paio di cose da sistemare se lo lanciate non funziona correttamente, è solo a scopo di dialogo con « MoMy »

function inser () {
   I=$IFS; IFS=""
   while [ "$sceltains" != "Cancel" ] && [ "$sceltains" != "abort" ]
   do
    for STATEMENTS in $(gtkdialog --program INSERIMENTO); do
     eval $STATEMENTS
    done
    IFS=$I
    if [ "$formato" = "" ]; then formato="brossura"; else formato=${formato##* }; fi
    sceltains=$EXIT
    if [ "$EXIT" = "OK" ] && ([ -n "$autore" ] && [ -n "$titolo" ])
    then
     if [ -z "$genere" ] ; then genere="-" ; fi ; if [ -z "$anno" ] ; then anno="-" ; fi ; if [ -z "$editore" ] ; then editore="-" ; fi ; if [ -z "$note" ] ; then note="-" ; fi
     echo ${titolo// /§§} ${autore// /§§} ${genere// /§§} ${anno// /§§} ${editore// /§§} $formato ${note// /§§}"¶" >> /home/$USER/Projects/database
    fi
   done
} ; export -f inser

function ricer () {
  if [ -e /home/$USER/Projects/database ] ; then
   I=$IFS; IFS=""
   while [ "$sceltaricer" != "Cancel" ] && [ "$sceltaricer" != "abort" ]
   do
    for STATEMENTS in $(gtkdialog --program RICERCA); do
     eval $STATEMENTS
    done
    IFS=$I
    if [ "$formato" != "" ] ; then formato=${formato##* } ; fi
    sceltaricer=$EXIT
    if [ "$EXIT" != "Cancel" ] && [ "$EXIT" != "abort" ] ; then
     if [ "$EXIT" = "OK" ]
     then
      if [ -e /home/$USER/Projects/risultato ] ; then rm /home/$USER/Projects/risultato ; fi
      if [ -n "$titolo" ] ; then titolo1=$(cat database | awk '{print$1}' | grep "$titolo" | uniq) ; fi
      if [ -n "$autore" ] ; then autore1=$(cat database | awk '{print$2}' | grep "$autore" | uniq) ; fi
      if [ -n "$genere" ] ; then genere1=$(cat database | awk '{print$1}' | grep "$genere" | uniq) ; fi
      if [ -n "$anno" ] ; then anno1=$(cat database | awk '{print$2}' | grep "$anno" | uniq) ; fi
      if [ -n "$editore" ] ; then editore1=$(cat database | awk '{print$1}' | grep "$editore" | uniq) ; fi
      if [ -n "$formato" ] ; then formato1=$(cat database | awk '{print$2}' | grep "$formato" | uniq) ; fi
      if [ -n "$titolo" ] ; then cat database | awk '$1=="'$titolo1'"' >> risultato ; else cat database >> risultato ; fi
      if [ -z "$autore" ] ; then cat database >> risultato ; else cat database | awk '$2=="'$autore1'"' >> risultato ; fi
      if [ -z "$genere" ] ; then cat database >> risultato ; else cat database | awk '$3=="'$genere1'"' >> risultato ; fi
      if [ -z "$anno" ] ; then cat database >> risultato ; else cat database | awk '$4=="'$anno1'"' >> risultato ; fi
      if [ -z "$editore" ] ; then cat database >> risultato ; else cat database | awk '$5=="'$editore1'"' >> risultato ; fi
      if [ -z "$formato" ] ; then cat database >> risultato ; else cat database | awk '$6=="'$formato1'"' >> risultato ; fi
      result=$(cat risultato | sort | uniq -c | grep "6 ")
      if [ -z "$result" ]
      then
       zenity --notification --text="nessuna corrispondenza trovata."
      else
       stamp=()
       results=${result:0: -1}
       lung=$(echo $results | grep -o "¶" | wc -l)
       for ((i=0;i<=$lung;i++))
       do
        if [ "$i" -lt "$lung" ] ; then arr=${results##*¶} ; arr=${arr:1} ; else arr=$results ; fi
        titl=$(echo "$arr" | awk '{print$2}')
        titl=${titl//§§/ }
        auth=$(echo "$arr" | awk '{print$3}')
        auth=${auth//§§/ }
        stamp+=(FALSE "$titl" "$auth")
        if [ "$i" -lt "$lung" ] ; then
         arrs=$((${#arr}+1))
         results=${results:0: -$arrs}
        fi
       done
       scelt=$(zenity --list --title="risultato ricerca occorrenze: $(($lung+1))" --text="seleziona per visualizzare" --width=600 --height=650 --radiolist --column="" --column="TITOLO                     " --column="AUTORE                   " "${stamp[@]}")
       if [ $? -eq 0 ] && [ -n "$scelt" ]
       then
        sh=${scelt// /§§}
        show=$(cat database | grep "$sh")
        show1=$(echo "$show" | awk '{print$1}') ; show2=$(echo "$show" | awk '{print$2}') ; show3=$(echo "$show" | awk '{print$3}') ; show4=$(echo "$show" | awk '{print$4}') ; show5=$(echo "$show" | awk '{print$5}') ; show6=$(echo "$show" | awk '{print$6}') ; show7=$(echo "$show" | awk '{print$7}') show7=${show7:0: -1} ; show1=${show1//§§/ } ; show2=${show2//§§/ } ; show3=${show3//§§/ } ; show4=${show4//§§/ } ; show5=${show5//§§/ } ; show6=${show6//§§/ } ; show7=${show7//§§/ }
        zenity --info --width=400 --height=300 --title="mostra libro selezionato" --text="TITOLO: $show1\nAUTORE: $show2\nGENERE: $show3\nANNO: $show4\nEDITORE: $show5\nFORMATO: $show6\nNOTE: $show7"
       fi
      fi
     fi
    fi
   done
  else zenity --notification --window-icon="error" --text="nessun database presente."
  fi
} ; export -f ricer

export RICERCA='
<window title="GESTIONE LIBRERIA">
<vbox>
 <frame ricerca titolo>
  <entry max_length="25">
   <variable>titolo</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame ricerca autore>
  <entry max_length="25">
   <variable>autore</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame ricerca genere>
  <entry max_length="25">
   <variable>genere</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame ricerca editore>
  <entry max_length="25">
   <variable>editore</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame ricerca anno 1a pubblicazione>
  <entry max_length="4">
   <variable>anno</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame ricerca formato>
  <table>
   <width>450</width><height>110</height>
   <variable>formato</variable>
    <item>() brossura</item>
    <item>() rilegato</item>
    <item>() digitale</item>
  </table>
 </frame>
  <hbox>
   <button cancel></button>
   <button ok></button>
  </hbox>
</vbox>
</window>
'

export INSERIMENTO='
<window title="GESTIONE LIBRERIA">
<vbox>
 <frame inserimento Titolo>
  <entry max_length="25">
   <variable>titolo</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame inserimento Autore>
  <entry max_length="25">
   <variable>autore</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame inserimento Genere>
  <entry max_length="25">
   <variable>genere</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame Inserimento Editore>
  <entry max_length="25">
   <variable>editore</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame Inserimento Anno 1a Pubblicazione>
  <entry max_length="4">
   <variable>anno</variable>
   <width>450</width><height>30</height>
  </entry>
 </frame>
 <frame Formato>
  <table>
    <width>450</width><height>110</height>
    <variable>formato</variable>
    <item>() brossura</item>
    <item>() rilegato</item>
    <item>() digitale</item>
  </table>
 </frame>
 <frame inserimento Note>
  <edit editable="true">
   <variable>note</variable>
   <width>450</width><height>150</height>
  </edit>
 </frame>
  <hbox>
   <button cancel></button>
   <button ok></button>
  </hbox>
</vbox>
</window>
'

export MAIN_DIALOG='
<window decorated="false" title="GESTIONE ARCHIVIO LIBRERIA" width-request="500" height-request="360">
<vbox>
 <frame>
  <text>
   <label>"GESTIONE ARCHIVIO LIBRERIA"</label>
  </text>
 </frame>
 <frame>
  <text>
   <label>"Inserimento dati"</label>
  </text>
  <button>
   <label>inserimento</label>
   <action>inser</action>
  </button>
 </frame>
 <frame>
  <text>
   <label>"Ricerca (e modifica) libri per campi"</label>
  </text>
  <button>
   <label>ricerca</label>
   <action>ricer</action>
  </button>
 </frame>
 <hbox>
  <button cancel></button>
 </hbox>
</vbox>
</window>
'

while [ "$scelta" != "Cancel" ] && [ "$scelta" != "abort" ]
do
 scelta=$(gtkdialog --program=MAIN_DIALOG)
 scelta=${scelta:0: -1} ; scelta=${scelta##*=} ; scelta=${scelta:1}
done

exit 0
 
@rebellion
Non sono riuscito a far di meglio perché ho difficoltà con gtkdialog -.-''
Questo potrebbe essere un punto di partenza:
Codice:
#!/bin/bash
# Uso `basename $0 "target da cercare"
TARGET_=$1
_DATA_BASE_="/home/$USER/Projects/database"
if [ -n "$TARGET_" ]; then
# Linea contenente il target
LINEA_TARGET=$(sed -n "/$TARGET_/p" "$_DATA_BASE_" | \
awk '{print NR, $4}' | \
grep -i "$TARGET_" | \
sed 's/ .*$//g')
post_zenity=$(for pre_zenity in $LINEA_TARGET; do sed -n ${pre_zenity}p $_DATA_BASE_ ; done)
zenity --list --title='Risultato Ricerca' --width=600 --height=450 \
--column='Selezione' "$post_zenity" 2> /dev/null
else
echo "Inserire argomenti come un 'titolo o parte di esso';
`basename $0` arg1
Esempio: Il profumo delle foglie di limone Clara Sánchez romanzo 2011 Mondadori rilegato note
La 4^ colonna sarebbe la data della pubblicazione in italia
./`basename $0` profumo"
fi
exit 0
Forse con awk si può fare tutto in un colpo solo. buh!
@rebellion Così funge, però bisogna impostargli la colonna ($1, $2...$N in awk '{print NR, $4}')
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top