bash read

Sekcia: Programovanie 22.03.2007 | 21:40
Avatar nighthawk Gentoo  Používateľ
Caute ludia :)
Neviete niekto ako sa v bashi da nacitat slovo zo subora a porovnavat ho s inym slovom z ineho subora.
Proste sa jedna o skript ktory prevadza kontrolu a opravu pravopisu v texte.
vdaka :)
    • Re: bash read 22.03.2007 | 22:23
      Avatar nahnevaný mladý muž gNewSense  Používateľ
      No, ja by som to robil asi takto. Začal by som tým že sed skriptom by som dal slova do stĺpcov, nejak takto (všetko píšem z hlavy takže tam pár bugov asi bude):
      sed -e 's/ /\n/g' \
          -e 's/,/,\n/g' \
          -e 's/. /\.\n' vstup.txt > aaa.tmp
      

      Výstup by mohol vyzerať takto:
      Teleso
      ponorené
      dó           <-- tu je akože preklep
      kvapaliny
      je
      nadľahčované
      silou
      ktorá
      sa
      rovná
      

      Tento výstup môžeš porovnávať zo slovníkom (slovnik.txt) a chybné slová nejak označiť (napr. html ?).
      echo "<html><body>"
      (while read SLOVO; do
        if [ "`grep -i ^$SLOVO$ slovnik.txt`" == "" ]; then
          echo -n "$SLOVO "
        else
          echo -n "<u>$SLOVO</u> "
        fi
      done) < aaa.tmp
      echo "</html></body>"
      

      Asi tak.
      • Re: bash read 22.03.2007 | 22:46
        Avatar borg Fedora  Administrátor
        a poculi ste uz o aspelli?
        • Re: bash read 22.03.2007 | 22:57
          Avatar superlamer Debian RedHat FreeBSD  Používateľ
          ee...

          prvy argument je subor s textom, ktory chceme skontrolovat, druhy argument je subor so VSETKYMI slovami
          #!/bin/bash
          #
          if [ $# != 2 ]; then
            echo -e "Pouzitie: [subor s textom] [slovnik]\n"
            exit 0;
          fi
          
          if [ ! -f $1 ]; then
            echo -e "\nChyba: subor \"$1\" neexistuje\n"
            exit 1;
          fi
          
          if [ ! -f $2 ]; then
            echo -e "\nChyba: subor \"$2\" neexistuje\n"
            exit 1;
          fi
          
          pocet_slov=`wc -l $2 | awk '{ print $1 }'`
          
          while read line; do
            for slovo in $line ; do
                  pomocna=1
                  while read slovnik; do
                    if [ "$slovo" == "$slovnik" ]; then
                          echo "$slovo... OK "
                          break;
                    else
                          if [ "$pomocna" == "$pocet_slov" ]; then
                            echo "$slovo... ZLE";
                          fi
                    let "pomocna += 1"
                    fi;
                  done < $2;
            done;
          done < $1;
          
          <pre>bash# grep initdefault /etc/inittab id:0:initdefault:</pre>