我想知道哪个单词在一行中重复以及它在文件中出现了多少次

我想知道哪个单词在一行中重复以及它在文件中出现了多少次

示例:我有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

相关内容