터미널을 사용하고 cat "grep"을 사용하여 txt 파일에서 가장 일반적인 n개의 단어를 찾으세요. 및 tr -d "/r" 명령

터미널을 사용하고 cat "grep"을 사용하여 txt 파일에서 가장 일반적인 n개의 단어를 찾으세요. 및 tr -d "/r" 명령

나는 찾고 싶다N텍스트 파일에서 가장 일반적인 단어이지만 다음과 같은 조건을 갖습니다.

  • cat파일을 받으세요.
  • grep .단어를 얻으십시오.
  • tr -d '/r'새로운 줄을 제거하십시오.

나는 코드의 후반부를 작업할 수 있게 되었습니다 |sort | uniq -c | sort -nr| head -10.

답변1

을 사용한다고 말씀하셨는데 grep, 가장 일반적인 단어를 찾는 것이 목표라면 꼭 필요하다고 생각하지 않습니다. 아마도 텍스트 파일을 단어로 분할한 다음 | sort | uniq -c | sort -nr | head -10파이프라인을 실행하고 싶을 가능성이 높습니다 .

즉시 떠오르는 해결책(그리고 의심할 바 없이 많은 대안이 있음)은 다음과 같은 방식으로 정규식을 사용하는 것입니다 sed.

sed 's/\s/\n/g'

\s이는 단순히 모든 공백 문자( )를 단일 개행 문자( )로 바꾸는 것을 의미합니다 \n. 결합하면 귀하의 솔루션은 다음과 같습니다.

cat [file] | sed 's/\s/\n/g' | sort | uniq -c | sort -nr | head -10 | awk '{print $2}'

awk '{print $2}'(숫자 대신) 단어만 표시하기 위해 끝에 추가했지만 이는 모두 스크립트의 목적에 따라 다릅니다.

답변2

이것은 숙제처럼 들립니다.

cat대소문자(HE=He=he=hE) 및 구두점으로 끝나는 단어(he.=he=he,=he!) grep일치 에 대한 모든 요구 사항을 따릅니다 .tr

for word in $(
  cat derp.txt | \
  tr '[:upper:]' '[:lower:]' | \
  tr -d '[:punct:]' | \
  tr -d '/r'
)
do
  words[$word]=$(cat derp.txt | grep -c $word)
  echo "${words[$word]} $word" # lots of duplicate output that's filtered out below.
done | sort -u | tail -n 10

grep .모든 것과 일치하는데 오타인가요?

tr -d '\r'루프의 입력 필드 구분 기호는 공백과 줄 바꿈을 구분 기호로 처리하기 때문에 이 경우에는 의미가 없습니다 .IFSfor

Jason K Lai의 솔루션이 아마도 최고일 것입니다.

관련 정보