免费注册 查看新帖 |

Chinaunix

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

请高手解答一个文件内容删除的问题 [复制链接]

论坛徽章:
0
发表于 2011-09-03 20:55 |显示全部楼层
现在有个文件
假设内容是
abcd   id=1 defg
bda id=2 dfg

。。。

ert id=65535 dvdf
其中每行有一个id是唯一的
顺序也是从1-65535但每行除了id其他内容没有规律


现在需要把文件内容的
id=32768至id=65535行的数据删除不能留下空行
请问有什么效率高一点的办法吗


我试过用把32768-65535放在一个数组
然后用grep
但是效率太差了 感觉比while文件再循环32768-65535做删除慢

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
发表于 2011-09-03 23:12 |显示全部楼层
perl -pe "exit if $. == 32768" file

论坛徽章:
0
发表于 2011-09-04 01:15 |显示全部楼层
perl -i.bak -ne 'print unless ($.==32768..65535)' file

论坛徽章:
6
15-16赛季CBA联赛之新疆
日期:2016-03-22 22:34:5915-16赛季CBA联赛之山东
日期:2016-04-11 09:08:41程序设计版块每日发帖之星
日期:2016-06-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-19 06:20:00每日论坛发贴之星
日期:2016-07-19 06:20:0015-16赛季CBA联赛之青岛
日期:2016-07-20 22:44:17
发表于 2011-09-04 02:04 |显示全部楼层
while (<>)
{
$I ++;
last if ($I >32767);
print;
}

Linux的话还可以
head -32767 a.txt > b.txt

论坛徽章:
0
发表于 2011-09-05 12:12 |显示全部楼层
回复 2# zhlong8


    $.不是行号么。。。
这文件不包含id的行数是不固定的
我只是写一个子程序
传递进去文件名,要删除的id范围
现在的想法是把含id的行全部hash
然后按key装入数组,再与要删除范围的数组使用Array:iff
找到deleted的数组;
但是不知道效率怎么样
等忙完手头的事情我在实验一下

论坛徽章:
0
发表于 2011-09-05 17:00 |显示全部楼层
  1. sed -i '/id=32768/,/id=65535/d' infile
复制代码
回复 1# ludio333

论坛徽章:
0
发表于 2011-09-05 18:57 |显示全部楼层
  1. perl -ne "print unless /id=32768/../id=65535/"
复制代码

论坛徽章:
0
发表于 2011-09-06 11:46 |显示全部楼层
回复 7# perlnewbie


    这个能用???
我测试了一下不行啊

论坛徽章:
0
发表于 2011-09-06 12:09 |显示全部楼层
回复  perlnewbie


    这个能用???
我测试了一下不行啊
ludio333 发表于 2011-09-06 11:46


测试过啦,一点问题没有呀~~

难道你的 Perl 版本太低??

>5.10

论坛徽章:
0
发表于 2011-09-11 20:26 |显示全部楼层
给一段比较笨的代码:
while (<>) {
        @array = split;
        $id = (split "=",$array[1])[1];
        if ( $id >= 32768 ) {
                if ( $id <= 65535) {
                        next;
                }
        }
   print;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP