각 줄에 한 단어가 포함된 텍스트 파일이 있는데 바이그램을 만들고 각 바이그램의 반복 횟수(통계)를 계산하고 싶습니다.
내 접근 방식:
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