한 줄에서 어떤 단어가 반복되는지, 파일에 몇 번 나타나는지 알고 싶습니다.

한 줄에서 어떤 단어가 반복되는지, 파일에 몇 번 나타나는지 알고 싶습니다.

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

관련 정보