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