免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3281 | 回复: 11
打印 上一主题 下一主题

文本处理求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-23 11:42 |只看该作者 |倒序浏览
10可用积分
1.txt是一个形如
30        a1        9876
29        a2        9874
28        a3        9872
27        a4        9870
26        a5        9868
25        a6        9866
24        a7        9864
23        a8        9862
22        a9        9860
21        a10        9858
20        a11        9856
19        a12        9854
18        a13        9852
17        a14        9850
16        a15        9848
15        a16        9846
14        a17        9844
13        a18        9842
12        a19        9840
11        a20        9838
10        a21        9836
9        a22        9834
8        a23        9832
7        a24        9830
6        a25        9828
5        a26        9826
4        a27        9824
的文本,现在需要统计该文本从第一行开始直到总行数第20%行的第三列的数据之和
请问,我怎么去找到这个20%的行
除了这样的方法
eval `awk '{ total_num+=$1/$1;  total_flow+=$3 }END {print "total_num="total_num,"total_flow="total_flow}' 1.txt`
awk -v total_num=$total_num '{ x+=$1/$1; if ( x < total_num*0.2 ) y+=$3 } END { print "y="y}'1.txt

最佳答案

论坛徽章:
0
2 [报告]
发表于 2008-04-23 11:42 |只看该作者

  1. #!/usr/bin/sh
  2. C=$(wc -l 1.txt | awk '{printf "%d", $1*0.2}')
  3. head -n $C 1.txt| awk  '{sum+= $3};END{print sum}'
复制代码

论坛徽章:
0
3 [报告]
发表于 2008-04-23 11:56 |只看该作者

  1. awk '{a[NR]=$3}END{for(i=1;i<=NR/5;i++)sum+=a[i];print sum}'  file

复制代码

论坛徽章:
0
4 [报告]
发表于 2008-04-23 12:09 |只看该作者
try

  1. awk 'a[NR]=$3 ;END{b=(index(NR/5,"."))?int(NR/5)+1:NR/5;for(i=1;i<=b;i++){c+=a[i]}print c}' a
复制代码

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
5 [报告]
发表于 2008-04-23 12:21 |只看该作者
试试这个:
awk 'FNR<NR{
    if (FNR==1)
      lines=int((NR-1)*.2);
    sum+=$3;
    if (FNR ==lines){
      print sum;
      exit}}' 1.txt 1.txt

读文件两次,第一次得到文件总行数,并计算第20%的行号;第二次累加第3列,达到第20%行后打印总和并退出程序。

论坛徽章:
0
6 [报告]
发表于 2008-04-23 13:19 |只看该作者
total=$(wc -l data|awk '{print $1}') && awk 'dead=NR/'$total' {if(dead<=0.2){result+=$3}} END{print result}' data

[ 本帖最后由 jackymail 于 2008-4-23 13:20 编辑 ]

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
7 [报告]
发表于 2008-04-23 13:27 |只看该作者
awk 'BEGIN{a[0]=0}{a[NR]=a[NR-1]+$3}END{print a[int(NR/5)]}'

[ 本帖最后由 cjaizss 于 2008-4-23 13:32 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2008-04-23 13:49 |只看该作者
如果总行数不能被5整除,
怎么知道你要处理的行数?

论坛徽章:
0
9 [报告]
发表于 2008-04-23 14:03 |只看该作者
原帖由 davistar 于 2008-4-23 11:56 发表

awk '{a[NR]=$3}END{for(i=1;i

恩谢谢你啊

论坛徽章:
0
10 [报告]
发表于 2008-04-23 14:15 |只看该作者
原帖由 davistar 于 2008-4-23 11:56 发表

awk '{a[NR]=$3}END{for(i=1;i

我想问一下,我可以吧这个放到循环中去吗?
比如这样for((j=1;j<9;j++))
do
awk -v y=$y  '{a[NR]=$3}END{ for(i=1;i<=j*NR/10;i++) sum+=a; print sum y }' url.txt >url1.txt
echo "the $j 0% has \n"
awk '{print $1 / $2}' url1.txt
echo 0
done
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP