2013-03-24 2 views
1

дан MultiLangual .txt файлы, такие как:Awk: частота символов из одного текстового файла?

But where is Esope the holly Bastard 
But where is 생 지 옥 이 군 
지 옥 이 
지 옥 
지 
我 是 你 的 爸 爸 ! 
爸 爸 ! ! ! 
你 不 會 的 ! 

Я слово частоты подсчитанных слов, разделенных пробелами С помощью этой функции Awk:

$ awk '{a[$1]++}END{for(k in a)print a[k],k}' RS=" |\n" myfile.txt | sort 

Получение элегантна:

1 생 
1 군 
1 Bastard 
1 Esope 
1 holly 
1 the 
1 不 
1 我 
1 是 
1 會 
2 이 
2 But 
2 is 
2 where 
2 你 
2 的 
3 옥 
4 지 
4 爸 
5 ! 

Как сделать изменить его для подсчета символов-частоты?


EDIT: Для символов частоты, я (@ ответ Sudo_O в):

$ grep -o '\S' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt 

Для словесных частот, использование:

$ grep -o '\w*' myfile.txt | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > myoutput.txt 

ответ

3

Один метод:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' 
3 옥 
4 h 
2 u 
2 i 
3 B 
5 ! 
2 w 
4 爸 
1 군 
4 지 
1 y 
2 l 
1 E 
1 會 
2 你 
1 是 
2 a 
1 不 
2 이 
2 o 
1 p 
2 的 
1 d 
1 생 
3 r 
6 e 
4 s 
1 我 
4 t 

Использование Перенаправление сохранить вывод в файл:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' > output 

И отсортированный выход:

$ grep -o '\S' file | awk '{a[$1]++}END{for(k in a)print a[k],k}' | sort > output 
+0

Спасибо! Счастливый ВАС ответил! – Hugolpz

+1

Смешные, оба ** $ grep -o. файл ** и ** $ grep -o '\ S' файл ** работает. Правильно ли они оба? – Hugolpz

+2

@Hugolpz хорошо место. Нет, это не правильно. Первоначально я отправил 'grep -o .', но совпадал бы с пробелом, поэтому я изменил бы его на' grep -o '\ S'', где '\ S' - это сокращенное выражение regexp, которое соответствует любому не-пробелу персонажи. –