Как считать случаи всех слов во всех файлах каталога с помощью grep? Но с количеством, увеличенным только однажды на слово на файл

ssh_host_key закрытый ключ, если Вы используете протокол SSHv1 и ssh_host_key.pub открытый ключ соответствия. Это должен быть ключ RSA.

При использовании SSHv2, Вы выбрали между несколькими алгоритмами подписания как DSA, RSA и ECDSA и затем ssh_host_ecdsa_key и и т.д. используются.

5
14.12.2014, 15:03
4 ответа

Используйте оператор сопоставления файлов в цикле для . для f в * _*.png будет соответствовать всем указанным именам файлов png и назначит каждое имя переменной f. Затем в цикле используйте операцию $ {f% _ *} bash для извлечения только номера файла.

FOLDER="$HOME/Images/Shutter"
cd "$FOLDER"
for f in *_*.png
do
    num=${f%_*}
    shutter -f -e -n -o "${FOLDER}/${num}_$(date '+%d-%m-%Y.png')"
done
-121--186507-

Вы помещаете -exec между кавычками, которые были около конца времени, это не то, что вы хотите. Вы должны сделать:

найти/mnt -type f -name «* .jpg» -newermt «2014-12-14 01:00:00»! -newermt «2014-12-14 02:00:00» -exec cp -pf {}/home/pi/box/pictures/;

(все в одной строке)

-121--175231-

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

# find all words from all files within the directory
grep -o -h -E '\w+' directory/*|sort -u | \
while read word;
do
        # iterate through each word and find how many files it occurs
        c=`grep -l "$word" directory/*|wc -l`
        echo "$c $word";
done
-1
27.01.2020, 20:43

Можете ли вы проверить фактический файл конфигурации часового пояса? ~ 20 секунд разница предполагает, что есть несоответствие между часовыми поясами, и один настроен с високосными секундами, другой без високосных секунд:

> TZ=right/Europe/London date; TZ=Europe/London date
Sun Dec 20 22:34:45 GMT 2015
Sun Dec 20 22:35:10 GMT 2015

Возможно, проще проверить, если TZ = UTC дата печатает одно и то же время на всех машинах, чтобы исключить различия в

Это должно точно учитывать 26 секунд (1 дополнительная разница секунд может быть объяснена, если проверена прямо на второй границе). Вы уверены, что оба вышеперечисленных клиента уже отлично синхронизированы?

Некоторые GPS-палочки печально известны тем, что забывают о различиях в секундах скачка, но если все ваши клиенты используют один и тот же NTP-сервер, это не может иметь эффекта - только если вы используете (плохое) локальное GPS-устройство в качестве источника времени NTP.

-121--132993-

По умолчанию пакет mselog устанавливает демон, который переводит MCE в удобочитаемую для пользователя форму и записывает их в системные журналы. Затем их можно просмотреть в /var/log/syslog или с помощью journalctl . Демон запускается из сценария init, для него нет необходимости добавлять системный блок.

Маловероятно, что проблемы с веб-камерой, которые вы видите, вызовут MCE, поэтому я сомневаюсь, что это поможет вам. Устройство, указанное как вход для mcelog , не является устройством ввода, это специальное устройство, используемое для связи между ядром и любым другим устройством, заинтересованным в MCE ( mcelog в данном случае).

-121--199868-

Вот как обработать каждый файл в каталоге по отдельности:

for f in yourdirectory/*; do cat "$f" |

Вот как я отфильтровываю все, кроме слов, из текстовых данных:

sed 's/\.$//;s/\.\([^0-9]\)/\1/g;s/[][(),;:?!]//g' | tr [A-Z] [a-z] |

Но ваш метод может работать точно так же. (Я хотел убедиться, что не удалить дефисы из переносных слов или апострофы из сокращений.)

Либо путь, продолжить следующим образом:

tr -s ' ' '\012' | sort -u ; done |

Это делает один-на-файл список слов, так что теперь просто:

sort | uniq -c

Если вы хотите, чтобы список от most- до наименее частых, просто прихватить | sort -nr .

Также может потребоваться добавить дополнительные знаки препинания, например, {} в список в конце sed выше, в зависимости от входных данных.

-1
27.01.2020, 20:43

Я только что наткнулся на исходный ответ здесь @Mehmet, когда искал что-то несвязанное, и я вижу, что, хотя он работает, он ужасно неэффективен, требуя повторного чтения каждого файла для каждого уникального слова в все файлы! Второй ответ @Jeff довольно запутан, несмотря на объяснение, и, что хуже всего, он страдает от файла cat | sin!

Достаточно одного прохода для всех данных, и это можно сформулировать, эффективно комбинируя предыдущие ответы:

find . -maxdepth 1 -type f -print |
while read file; do
    egrep -h -o "[[:alnum:]][[:alnum:]_-]*" "$file" |
    tr '[A-Z]' '[a-z]' |
    sed "s|^|$file\||"
done |
sort -t '|' -k 2 |
uniq |
awk -F '|' '{
    if (lw != $2) {
        print fc " " lw;
        fc = 0;
    }
    lw = $2;
    fc++;
}'

Обратите внимание, что выбор разделителя полей важен, если ваши имена файлов включают пути и / или если они включают пробелы. Я выбрал символ | , поскольку он никогда не должен быть частью слова, напечатанного egrep , и вряд ли когда-либо появится в имени файла или каталога.

1
27.01.2020, 20:43

Я бы использовал здесь perl:

perl -T -lne '
  for (/\w+/g) {$count{lc $_}->{$ARGV}=undef}
  END {print "$_: " . keys %{$count{$_}} for keys %count}' ./*

Создает хэш хеша $ count {word} - это ссылка на хеш, ключи которого являются именами файлов, которые word находится в (и значения, которые нам все равно, здесь установлены на undef ).

В конце концов, мы просто подсчитываем количество элементов (то есть количество файлов) для каждого из этих хэшей (то есть для каждого из найденных слов).

2
27.01.2020, 20:43

Теги

Похожие вопросы