免费注册 查看新帖 |

Chinaunix

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

[求助]awk sed 比较上下两行,编辑筛选文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-21 09:24 |只看该作者 |倒序浏览
有这样的200多行数据
0                         0            0.00495
0.0785127        0.008        0.00494832
0                            0             0.00485
0.0272399               0.008       0.00483753
0.027245                         0.008      0.00483778
0                            0             0.00475
0.0177068               0.008       0.00473023
0                              0              0.00465
0.0137481        0.008        0.00462319
0                              0              0.00455
0.0116907        0.008        0.00451633
0.0116907        0.008        0.00451633
0                              0              0.00445
0.0104969        0.008        0.00441127
0.0104969        0.008        0.00441127
0                              0               0.00435
0.00975669        0.008        0.00430657
0.00975669        0.008        0.00430657
0                              0               0.00165
0.00823954        0.008        0.00162989
0.00824105        0.008        0.00163029
0                              0               0.00155
0.00822567        0.008        0.00153088
0                              0               0.00145
0.00821271        0.008        0.00143223


第二列值为0.008的紧挨着的两条记录只要第二条 删除上面的一行
最后形成 这样的数据
0                              0              0.00495
0.0785127        0.008        0.00494832
0                               0             0.00485
0.027245                         0.008      0.00483778
0                              0              0.00475
0.0177068               0.008       0.00473023
0                              0              0.00465
0.0137481        0.008        0.00462319
0                              0              0.00455
0.0116907        0.008        0.00451633
0                              0              0.00445
0.0104969        0.008        0.00441127
.....
......

能用awk筛选出来么??
或者导入到数据库里面 用SQL  求个位帮忙

论坛徽章:
0
2 [报告]
发表于 2006-10-21 11:26 |只看该作者
试试这个行不行:

  1. sed -n 'H;${g;s/[^\n]*0\.008[^\n]*\n\(0\.[^\n]*\)/\1/g;p}' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2006-10-21 11:41 |只看该作者
呵呵,我觉得说明一下比较好,这样清楚一点!
希望大家指正:我的思想是把先把所有行读成一行,取出两个\n之间包含0.008的字符串,这两个\n之间不再包含\n(即没有把所有行读成一行时含有0.008的行),再判断下一字符串是否是以“0.”字串开头的,是的话用以0.开头的到最近一个\n之间的字符串取代前面两个\n间含0.008的字符串!

论坛徽章:
0
4 [报告]
发表于 2006-10-21 14:57 |只看该作者
  1. awk '
  2. {
  3.         if ($2~/0.008/){
  4.                 line = $0;
  5.                 if (getline == 1 && $2~/0.008/) ;
  6.                 else print line;

  7.                 print ;
  8.         }
  9. }' urfile
复制代码

论坛徽章:
0
5 [报告]
发表于 2006-10-21 15:31 |只看该作者

  1. sed '/0.008/{n;//d}'
复制代码

论坛徽章:
0
6 [报告]
发表于 2006-10-21 15:49 |只看该作者
要求是“第二列”

论坛徽章:
0
7 [报告]
发表于 2006-10-21 21:09 |只看该作者
原帖由 awk就是awp加ak 于 2006-10-21 15:49 发表
要求是“第二列”

sorry看走眼了补上一个

  1. perl -e 'while(<>){push @arry,$_}for($i=0;$i<=$#arry;$i++){if($arry[$i]=~/0.008/){next if($arry[$i+1]=~/0.008/);print $arry[$i]}else{print $arry[$i]}}' 1.txt
复制代码

另外给你改一点小错误,^_^有些东西偷赖是不可以的

  1. awk '
  2. {
  3. if ($2~/0.008/)
  4.    {
  5.         line = $0;
  6.         getline
  7.         if ($2~/0.008/);
  8.         else print line
  9.         print
  10.    }
  11. else
  12.    {
  13.         print $0
  14.    }
  15. }' urfile
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-10-21 23:25 |只看该作者
能解释一下这一段具体的意思么??

  1. line = $0;
  2.         getline
  3.         if ($2~/0.008/);
  4.         else print line
  5.         print
复制代码


谢谢各位了

论坛徽章:
0
9 [报告]
发表于 2006-10-22 11:26 |只看该作者
呵呵!落了 else!没测试就是不行,3ks!

论坛徽章:
0
10 [报告]
发表于 2006-10-22 11:31 |只看该作者
原帖由 foolboy007 于 2006-10-21 23:25 发表
能解释一下这一段具体的意思么??

  1. line = $0;
  2.         getline
  3.         if ($2~/0.008/);
  4.         else print line
  5.         print
复制代码


谢谢各位了

先保存当前行,读入下一行(getline此时$0,$1等就会改变,为下一行的内容)。如果这行的第二列还是包含0.008,那么就不打印保存的那一行。第二行都是要打印的。或许写成这样会好理解一点:
awk '
{
        if ($2~/0.008/){

                line = $0;
                if (!(getline == 1 && $2~/0.008/)) print line;

                print $0;
        } else print $0;
}' urfile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP