您的位置:首页 > 运维架构 > Shell

shell脚本统计文件中单词的个数

2017-04-25 10:43 1241 查看

shell脚本统计文件中单词的个数

一、方案  http://www.cnblogs.com/youxuguang/p/5917215.html
方法一:

(1)cat file|sed 's/[,.:;/!?]/ /g'|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'   #其中file为要操作的文件,sed中/
/间有一个空格。

(2)sed 's/[,.:;/!?]/ /g' file|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'     #(1)和(2)效果一致。

方法二:

(1)awk 'BEGIN{RS="[,.:;/!?]"}{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}' file

这里 -F',' 表明每个词用逗号分隔  https://zhidao.baidu.com/question/586302142.html NF其实是number of field, 即整行(或者说record)里面词 (更准确的翻译应该是域)的总数
NF-1 就是倒数第二个词

sed ′s/\%//g‘

s表示替换,\%就表示百分号,s/\%//将%替换为空,最后的g标志表示全部替换

即删除所有的百分号

{for(i=1;i<=NF;i++)a[$i]++;

NF表示单行(记录 )中字段 数,$i表示对应字段 ,假设 文本是 "a b c d a b a" ,a出现3次所以a[a]++执行了3次,a[a]的值增加了3,这个循环完成 后a数组 中为已经读取的行相同内容字段出现次数

for (i in a) 表示 依次迭代a数组 的下标 ,赋值给变量 i,如上例a数组的下标 会是a,b,c,d(顺序是随机的),这四个下标会被按随机顺序赋值给变量 i。

print i"="a[i],打印字段 i和其出现次数a[i]

这样写每读取一行都 会打印 一次已经 重复出现过的字段 统计,为什不只打印 最终 统计呢,像下面这样

awk '{for(i=1;i<=NF;i++)a[$i]++;}
END{for(i in a)print i" = "a[i]}' tongji.txt

二、验证

[root@hehe668 shell]# cat file

hello world,hi girl;how old are you?

where are you from?

how are you?

i am fine!thinks.

and you?
http://www.cnblogs.com/youxuguang/
[root@hehe668 shell]# cat file|sed 's/[,.:;/!?]/ /g'|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print
i,array[i]}'

com 1

http 1

from 1

www 1

i 1

you 4

hi 1

hello 1

youxuguang 1

and 1

world 1

cnblogs 1

where 1

old 1

how 2

fine 1

am 1

are 3

girl 1

thinks 1

[root@hehe668 shell]# sed 's/[,.:;/!?]/ /g' file|awk '{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}'

com 1

http 1

from 1

www 1

i 1

you 4

hi 1

hello 1

youxuguang 1

and 1

world 1

cnblogs 1

where 1

old 1

how 2

fine 1

am 1

are 3

girl 1

thinks 1

[root@hehe668 shell]# awk 'BEGIN{RS="[,.:;/!?]"}{for(i=1;i<=NF;i++)array[$i]++;}END{for(i in array) print i,array[i]}' file

com 1

http 1

from 1

www 1

i 1

you 4

hi 1

hello 1

youxuguang 1

and 1

world 1

cnblogs 1

where 1

old 1

how 2

fine 1

am 1

are 3

girl 1

thinks 1

原文:http://www.cnblogs.com/youxuguang/p/5917215.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: