免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1959 | 回复: 5

[文本处理] 再弱问一个awk处理文本的问题 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-04-10 17:58 |显示全部楼层
数据的第一列是行数。存在一个标准值,使数据第2列到第n-1列都小于标准值,数据第n列及以后都大于标准值。标准值是已知的。计算第n列减去n-1列的差,输出最小值。例如,给定标准值为3.2,对一下文本操作,输出0.4
-----------------------------------------------------------------
1  0.5   1.1   1.3    1.5    2.5     3.3    3.5     3.8    4.0
2  2     2.2   2.6    2.7    2.8     3.4    3.8     3.8    4.0
3  1.2   2.2   2.3    2.4    3.1     3.5    3.8     3.8    4.0

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-04-10 18:19 |显示全部楼层
本帖最后由 moperyblue 于 2016-04-11 11:39 编辑
  1. awk -v val=3.2 '{for(i=2;i<=NF;i++)if(val>$(i-1) && val<$i)a[$i-$(i-1)]}END{asorti(a);print a[1]}'
复制代码

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-04-10 22:33 |显示全部楼层
回复 2# moperyblue

你真的好热心,谢谢你

   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
发表于 2016-04-11 08:53 |显示全部楼层
  1. awk -v v=3.2 -vmin=10000 '{for(i=1;i<=NF;++i)if($i>v){min=$i-$(i-1)<min?$i-$(i-1):min;break}}END{print min}'
复制代码

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
发表于 2016-04-11 14:57 |显示全部楼层
  1. #!/bin/bash

  2. min=9999999
  3. while read line; do
  4.         vals=(`echo $line`)
  5.         n=$(( ${#vals[*]}/2 ))
  6.         n_1=$(( ${#vals[*]}/2-1 ))
  7.        
  8.         while true; do
  9.                 if [[ `echo "${vals[$n]} >= $1" | bc` -eq 1 && `echo "${vals[${n_1}]} <= $1" | bc` -eq 1 ]]; then
  10.                         break;
  11.                 elif [[ $n -gt ${#vals[*]} || ${n_1} -lt 0 ]]; then
  12.                         break;
  13.                 elif [[ `echo "${vals[${n_1}]} > $1" | bc` -eq 1 ]]; then
  14.                         let n--;
  15.                         let n_1--;
  16.                 elif [[ `echo "${vals[$n]} < $1" | bc` -eq 1 ]]; then
  17.                         let n++;
  18.                         let n_1++;
  19.                 fi
  20.         done
  21.        
  22.         temp=`echo "${vals[$n]} - ${vals[${n_1}]}" | bc`
  23.        
  24.         echo $temp
  25.        
  26.         if [[ `echo "$temp < $min"|bc` -eq 1 ]]; then
  27.                 min=$temp
  28.         fi
  29. done <$2

  30. echo $min
复制代码
回复 1# vcuteym

这么搓的代码
   

论坛徽章:
1
程序设计版块每日发帖之星
日期:2016-05-04 06:20:00
发表于 2016-04-13 20:10 |显示全部楼层
回复 5# liion631818
比我厉害


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP