나는 찾고 싶다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'
루프의 입력 필드 구분 기호는 공백과 줄 바꿈을 구분 기호로 처리하기 때문에 이 경우에는 의미가 없습니다 .IFS
for
Jason K Lai의 솔루션이 아마도 최고일 것입니다.