내가 가지고 있는 파일은 test
이며 다음 줄이 포함되어 있습니다.
This is a test Test test test There are multiple tests.
나는 출력을 다음과 같이 원한다:
test@3 tests@1 multiple@1 is@1 are@1 a@1 This@1 There@1 Test@1
다음 스크립트가 있습니다.
cat $1 | tr ' ' '\n' > temp # put all words to a new line
echo -n > file2.txt # clear file2.txt
for line in $(cat temp) # trace each line from temp file
do
# check if the current line is visited
grep -q $line file2.txt
if [ $line==$temp]
then
count= expr `$count + 1` #count the number of words
echo $line"@"$count >> file2.txt # add word and frequency to file
fi
done
답변1
sort | uniq -c | sort -n
빈도표를 만드는 데 사용됩니다 . 원하는 형식을 얻으려면 더 많은 조정이 필요합니다.
tr ' ' '\n' < "$1" \
| sort \
| uniq -c \
| sort -rn \
| awk '{print $2"@"$1}' \
| tr '\n' ' '
답변2
grep
+sort
+uniq
+sed
관로:
grep -o '[[:alnum:]]*' file | sort | uniq -c | sed -E 's/[[:space:]]*([0-9]+) (.+)/\2@\1/'
산출:
a@1
are@1
is@1
multiple@1
test@3
Test@1
tests@1
There@1
This@1
답변3
$ 고양이>wdbag.py #!/usr/bin/python 컬렉션에서 가져오기* 수입재시스템 text=''.join(sys.argv[1:]) t=카운터(re.findall(r"[\w']+", text.lower())) t 항목의 경우: 항목 인쇄+"@"+str(t[항목]) $ chmod 755 wdbag.py $ ./wdbag.py "여러 테스트가 포함된 테스트 테스트 테스트 테스트입니다." a@1 테스트@1 다중@1 이@1 1이야 저기@1 1이야 테스트@4 $ ./wdbag.py 여러 테스트가 포함된 테스트 테스트 테스트 테스트입니다. a@1 테스트@1 다중@1 이@1 1이야 저기@1 1이야 테스트@4
답변4
grep과 awk를 사용하세요.
grep -o '[[:alnum:]]*' file | awk '{ count[$0]++; next}END {ORS=" "; for (x in count)print x"@"count[x];print "\n"}'
test@1 test@1 배수 @1 a@1 이 @1 여기 @1은 @1 test@3은 @1