awk解字符串问题

1.输入:一个文本文件,第一行是一个数字n,其他每行分别是一个单词以及它出现的百分比。

输出:输出n个单词,每个单词出现的几率符合它的百分比。
 
awk 'BEGIN{sum=0;}1{n=$0}2,${up=sum+$1;while(sum<$1){arr[sum]+=$2;sum++;}if(i>100){exit 1;}}END{while(--n>0){print arr[rand()%100];}'
 
2. 替换字符串
修改test.txt的23行将test换成ttes
sed '23s/test/tset/g' test.txt
Cat test.txt| awk 'NR==23{gsub(/test/,"tset");print $0}'
 
3.统计域名的出现次数
文件有如下若干行
http://www.baidu.com/index.html
http://image.baidu.com/index.html
http://www.baidu.com/index.html
http://www.baidu.com/index.html
http://map.baidu.com/index.html
http://tieba.baidu.com/index.html
http://map.baidu.com/index.html
http://www.baidu.com/index.html
 
统计每个域名出现次数,并按由多到少排序
4 www.baidu.com
2 map.baidu.com
......
 
awk -F'\\/' '{arr[$3]++;}END{for(item in arr){print arr[item], item}}' test | sort -k1nr
 
4. 找到重复最多的行
sort file | awk 'BEGIN{str="";num=0;maxstr="";max=0;}{if(str==$0){num++;if(max<num){maxstr=str;max=num;}}else{str=$0;num=1;}}END{print "The line is ", maxstr, " with ", max, " times";}'
找到重复最多的单词
把单词变成行即可
sed 's/\( \|\t\)/\n/g file | tr -s '\n'
 

你可能感兴趣的:(字符串,职场,awk,休闲)