Как читать слово за словом из файла в цикле for - PullRequest
0 голосов
/ 11 октября 2011

Этот код предназначен для чтения каталога текстового файла и сопоставления его с input.txt.Я получил слово из input.txt, но я не знаю, как извлечь каждое слово из текстового файла и сравнить с ним.Файл в форме абзаца, поэтому я не могу искать похожие символы и тому подобное.Есть ли способ прочитать каждое слово по одному и сравнить?

#!/bin/bash

findkeyword () {
    file="$1"   
    keyword="$2"    
    value="$3"

    count=0
    while read line
    do

# проблема прямо здесь


    set -- $line
    a=$(expr length "$file")
        for i in '$line'; do
                    if [ "$i" = "$keyword" ]; then
                count=`expr $count + 1`;
            fi
            done

    done <$file

    echo "Profile: " $file
    scorefile $value $count
}

scorefile () {
    value="$1"
    count="$2"

    echo "Score: "  $((value * count)) 

}


while read line
        do
        set -- $line
        keyword=$1
            value=$2

        echo "key: " $keyword
        echo "value: " $value

        for xx in `ls submissions/*`
            do
                     filename=$xx
                     findkeyword $filename $keyword $value
            done
        done <input.txt

1 Ответ

2 голосов
/ 11 октября 2011

Чтобы подсчитать вхождения слова в файл, просто используйте grep -c (count):

for word in $(<input.txt); do echo -n $word " " ; grep -c $word $file; done  

Для разных файлов в директории никогда не используйте ls.

 for file in submissions/*
 do
      echo "$file"
      for word in $(<input.txt)
      do
          echo -n "$word " ; grep -c "$word" "$file"
      done
 done 

- в очень, очень редких случаях это может быть лучшим решением, но пробелы, переводы строки и специальные символы в именах файлов повредят ваши команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...