통계 튜플 [닫기]

통계 튜플 [닫기]

각 줄에 한 단어가 포함된 텍스트 파일이 있는데 바이그램을 만들고 각 바이그램의 반복 횟수(통계)를 계산하고 싶습니다.

내 접근 방식:

cat TEXTEN1.txt | tr '*\n' '*? *\n'

두 개의 열을 만들고 싶지만 이 솔루션은 실패합니다.

답변1

paste -d' ' - - < TEXTEN1.txt

생성된 튜플 수를 얻으려면 다음을 수행하십시오.

paste -d' ' - - < TEXTEN1.txt | sort | uniq -c

그러나 이 접근 방식에서는 바이그램의 절반이 제외됩니다. 예를 들어, 입력 파일이 다음과 같은 경우:

alpha
beta
gamma
alpha
beta
gamma

튜플에는 행 1-2, 3-4 및 5-6이 포함되지만 행 2-3 및 3-4는 포함되지 않습니다.

이 문제를 해결하는 한 가지 방법은 입력 파일의 복사본을 만들고 맨 위에 단어가 아닌 문자(예: "#")를 추가한 다음 단어가 아닌 단어가 포함된 결과를 필터링하는 것이라고 생각할 수 있습니다.

cat <(paste -d' ' - - < TEXTEN1.txt; paste -d' ' - - < TEXTEN2.txt) | sort | uniq -c | grep -v #

답변2

gnu시스템 에서 다음을 실행할 수 있습니다.

paste <(head -n -1 infile) <(tail -n +2 infile) | sort | uniq -c

가지고 다닐 수 있는:

sed -e '1!{$!p' -e '}' infile | paste -d' ' - -  | sort | uniq -c

또는

awk 'NR>1{i=t" "$0; z[i]++};{t=$0}END{for (i in z){print z[i], i}}' infile

답변3

연속되는 두 줄마다 단어를 바이그램으로 결합하려면 다음을 수행할 수 있습니다.

cat TEXTEN1.txt|sed 'N; s/\n/ /'|sort|uniq -c

이렇게 하면 1-2, 3-4, 5-6 등과 같은 연속된 선 쌍이 결합됩니다.

원하는 것이 모든 +1 행(예: 1-2, 2-3, 3-4...)을 결합하는 것이라면 다음과 같이 할 수 있습니다.

cat TEXTEN1.txt|sed -n ':a N;s/\n/ /p;s/\w* //;ta'|sort|uniq -c

또는 (다소 더 우아하게) 사용sed + paste 콤비네이션작성자: @don_crissti

관련 정보