Я хочу узнать, какое слово повторяется в строке и сколько раз оно встречается в файле.

Я хочу узнать, какое слово повторяется в строке и сколько раз оно встречается в файле.

пример: у меня есть файл a.txt, содержащий следующее:

aunt bear bear true

У меня также есть файл b.txt, содержащий следующее:

tru tru high

конечный результат, который я хочу получить:

for a.txt : bear x 2
for b.txt : tru x 2

Пока что я могу думать только об этом:

cut -d ' ' -f1 file.txt | sort | uniq -c | head -1

У меня совсем нет идей.

Необходимо выполнить сортировку файлов; пояснение: при представлении файлов c.txt b.txt y.txt содержимое b должно быть первым, а содержимое y последним.

решение1

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

$ for file in a.txt b.txt ; do 
    printf 'for %s : %s\n' "$file" "$(tr ' ' '\n' < "$file" | sort | uniq -dc)"; 
  done
for a.txt :       2 bear
for b.txt :       2 tru

Или, если вам действительно нужноточноформат, который вы показываете:

$ for file in a.txt b.txt ; do 
    printf 'for %s : %s x %s\n' "$file" \
        $(tr ' ' '\n' < "$file" | sort | uniq -dc | awk '{print $2,$1}');
  done
for a.txt : bear x 2
for b.txt : tru x 2

решение2

$ for i in $(cat a.txt); do echo $i; done | sort | uniq -c | sort -g | tail -1
      2 bear

сценарий:

$ cat topword.sh
#!/bin/bash

FILENAMES=$@

for file in $@; do
    printf "$file:"
    cat $file | tr ' ' '\n' | sort | uniq -c | sort -g | tail -1
done

Выход:

$ bash topword.sh a.txt b.txt
a.txt:      2 bear
b.txt:      2 tru

А теперь вот вам задание: сделайте из этого черновика, который я вам дал, красивый и легко читаемый сценарий ;)

решение3

Простая команда awk сотворит здесь чудо

Первый шаг, поскольку нам нужно подсчитать, сколько раз определенное слово встречается в файле

шаг 1: Создание нового входного файла на основе входного файла

cat input file |sed -r "s/\s+/\n/g" >inputfile_final.txt

Шаг 2: Теперь простая команда awk с ассоциированным массивом будет творить чудеса

awk '{a[$1]++}END{for(x in a){print FILENAME, x,a[x]}}' inputfile_final.txt | sort -k3 -nr| sed -n '1p'| awk '{print "for" " " $1 " " ":" $2 " " "x" " "  $NF}'

выход

for inputfile_final.txt :bear x 2


Note: I have done for 1 file same method we can follow for remaining files too

Связанный контент