나는 각각 책의 한 장을 포함하는 10개의 텍스트 파일을 가지고 있으며, 한 줄에서 가장 자주 나타나는 단어 쌍을 찾고 싶습니다. 즉,
1장:
hello world good boy green sun
good green boy sun world hello
제 2 장:
3 장:
.....등
1장의 원하는 출력:
hello world (alphabet order)
답변1
awk '
{
$0 = tolower($0)
for (i = 1; i < NF; i++) {
pair = $i"" < $(i+1) ? $i" "$(i+1) : $(i+1)" "$i
c = ++count[pair]
if (c > max) max = c
}
}
END {
for (pair in count)
if (count[pair] == max)
print pair
}'
답변2
이 시도,
awk
각 단어 쌍을 인쇄합니다 .perl
단어 쌍의 단어를 정렬 하는 데 사용됩니다 (통과하다).sort
sum을 사용하여uniq -c
각 쌍의 발생 횟수를 계산합니다.
awk '{for (i=1;i<NF;i++) { print tolower($i)" "tolower($(i+1)) }}' file \
| perl -ane '$,=" "; print sort @F; print "\n";' \
| sort | uniq -c | sort -b -k1nr -k2
산출:
2 boy green
2 hello world
1 boy good
1 boy sun
1 good green
1 good world
1 green sun
1 sun world