noauto
все равно будет возвращать ошибку (stderr) во время загрузки, если источник недоступен.
nofail
удалит проверку ошибок.
nofail
без указания x-systemd.device-timeout =
по умолчанию будет использовать тайм-аут 90 секунд, хотя, когда источник недоступен и вы или процесс пытаетесь смонтировать его вручную.
Примечание: x-systemd.device-timeout = 0
устанавливает бесконечный тайм-аут.
Редактировать: Цитата
nofail
Не сообщать об ошибках для этого устройства, если оно не существует.
Вы можете перебирать список файлов, указанный в командной строке, следующим образом:
for file in "$@"
do
echo "Considering file ==> $file <=="
done
Ваш метод сопоставления слов должен быть совершенно эффективным. Вы также можете искать вхождения слова, используяgrep -o
echo 'I can cry cryogenic tears when I scry my hands. Can you cry too?' |
grep -o '\bcry\b' # \b marks a word boundary
Передача результата этого в wc -l
даст вам количество вхождений во входном потоке.
Использование $(... )
позволяет интерполировать вывод команды в текст, используемый другой командой. Например
echo "The date and time right now is $(date)"
Нам потребуется дополнительная работа, чтобы не искать первый файл, а вместо этого использовать его как список слов. Но, собрав это вместе, вы можете получить что-то вроде этого:
wordfile="$1"
wordlist=($(cat "$wordfile"))
shift
for file in "$@"
do
for word in "${wordlist[@]}"
do
# echo "$file: $word:" $(grep -o "\b${word}\b" "$file" | wc -l) # My way
echo "$file: $word:" $(tr ' ' '\n' <"$file" | grep -c "$word") # Your way
done
done
Это не очень эффективно, потому что N слов будет искать каждый файл N раз. Вы можете найти, что grep -f
поможет здесь.
Я бы сделал:
#! /bin/sh -
# usage: wordcount <file-with-words-to-search-for> [<file>...]
words=$(tr -s '[[:space:]]' '[\n*]' < "${1?No word list provided}" | grep.)
[ -n "$words" ] || exit
shift
for file do
printf 'File: %s\n' "$file"
tr -s '[[:space:]]' '[\n*]' | grep -Fxe "$words" | sort | uniq -c | sort -rn
done
(который подсчитывает только слова, которые встречаются хотя бы один раз в каждом файле ).
fgrep -cw 'word' file1 file2... fileN
Это выведет следующее:
file1:4
file2:16
и так далее, по одному в строке. Если это просто сумма всех файлов, сделайте что-то вроде этого:
echo "Total: $(( $(fgrep -cw 'word' file1 file2... fileN | awk -F: '{ print $NF" + " }') 0 ))"
, который будет выводить:
Total: 20