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

Si el directorio al que desea ir es /media/448AF1848AF172B2/Windows/System32/config/, puede ir allí en dos pasos con:

cd /media/448AF1848AF172B2
cd Windows/System32/config

Tenga en cuenta que :el argumento del segundo comando cdno debe comenzar con /si desea continuar desde el directorio especificado con el primer comando cd.

Un nombre de ruta que comienza con una barra inclinada /es una ruta absoluta:y siempre se interpreta comenzando desde la raíz de la jerarquía del sistema de archivos. Su segundo comando cd /Windows/...tenía una barra inclinada al principio, por lo que no continuó desde donde lo dejó el primer comando cd, sino que intentó rastrear una ruta completamente diferente comenzando desde el directorio raíz del sistema -una ruta eso no existió.

En su solución, tiene dos cdcomandos con rutas absolutas:

cd /media/448AF1848AF172B2
cd /media/448AF1848AF172B2/Windows/System32/config

Como su objetivo es llegar a /media/448AF1848AF172B2/Windows/System32/config, el primer comando es completamente innecesario :el segundo comando lo llevará al directorio exacto que especificó, sin importar cuál era su directorio actual antes.

1
03.06.2019, 21:47
3 ответа

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

$ 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
27.01.2020, 23:30

Здесь поможет простая команда 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
0
27.01.2020, 23:30
$ 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

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

0
27.01.2020, 23:30

Теги

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