蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 |
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程


    

蓝森林 http://www.lslnet.com 2006年6月26日 11:18


(急,拜托各位了)如何将文件中的若干行删除

文件a如下:
111|abc|19990202
111|aaa|20010101
222|dfg|19990202
333|qwe|19990208
444|www|20001202
444|eee|20030311
555|bbb|20020302
666|aaa|20030102
..............................(大约数万行)
第三个域为时间,现在的问题是如果两个记录的第一个域相同,则根据第三个域
的时间来判断,时间新的记录有效,删除时间旧的那条记录。如何删除那条旧的记录。
另:因为文件很大,约数万行,如何做一个循环,删除那些时间旧的记录。

(急,拜托各位了)如何将文件中的若干行删除

[code]
sort -r -t'|' -n -k1,1 -k3,3 a  | sort -u -t'|' -k1,1 > b
[/code]

(急,拜托各位了)如何将文件中的若干行删除

[code]sort -t"|" +0 -1 +2 -r FILE| awk -F"|" 'BEGIN{f=0}{if (f==0)  f=1;f1=$1;print $0} else if (f1!=$1) {f1=$1; print $0}}' >NEW_FILE[/code]

aix 测试通过

(急,拜托各位了)如何将文件中的若干行删除

在我的hp_ux下测试通过!!!
真是感谢biansj
致以万分谢意。

(急,拜托各位了)如何将文件中的若干行删除

我相信如果文件很大,而且需要经常执行的话,用perl效率会高很多

-------------------------------------------------------
#!/usr/bin/perl -w
use strict;
die "You must apply filename!" if (!$ARGV[0]);
open TEST,"<$ARGV[0]"               
        or die "Something wrong: $!";
my %index;
my %content;
while(<TEST>){
        chomp;
        s/\|/:/g;
        my @ttt=split /:/,$_;
        if ($index{$ttt[0]}){
                if ($index{$ttt[0]} lt $ttt[2]){
                        $content{$ttt[0]}=$ttt[1];
                        $index{$ttt[0]}=$ttt[2];
                }
        } else {
                $index{$ttt[0]}=$ttt[2];
                $content{$ttt[0]}=$ttt[1];
        }
}
foreach (sort keys %index){
print $_."|".$content{$_}."|".$index{$_}."\n";
}
--------------------------------------------------------

(急,拜托各位了)如何将文件中的若干行删除

...


呵呵,你们把作业都做完了,没偶啥事了~~~,所以,只好挑你们的毛病了,哈哈~~~

biansj 不愧是姜是老的辣呀,最快而且就那么几个字就搞掂了~~ 厉害!

taige 可惜了,写得很漂亮,没有得到楼主的首肯,可能是楼主没测试成功,仅仅是因为漏写了一个花括号,呵呵( f=1 前面,左花括号)

二流猫的perl脚本最快,毕竟perl解释器还是比shell高效。

但这还不是最快的,下面这个更快。仍然是用awk写,但是因为没有用到排序,所以占了点便宜。对于排超大量数据时,就比较明显了。

[code]#!/bin/sh

# 多数系统用 awk 就行,不一定要写 nawk  
nawk -F'|' 'BEGIN {n=0}
    {
    if ( $1 in item ) {
            if ( item[$1] < $3 ) {
            value[$1] = $2
            item[$1] = $3
          }
          next
    }
            prim[n++] = $1
            value[$1] = $2
            item[$1] = $3
}
END {
    for ( i=0; i<n; i++ ) {
       print prim[i]"|"value[prim[i]]"|"item[prim[i]]
    }
}' filename
[/code]

下面是我的测试,108万条记录。

# [b]wc -l filename[/b]
1080008 filename

(用 time cmd 来测试)

# [b]for i in rp.*; do echo "==========$i==========="; time  ./$i; done[/b]

==========rp.biansj.sh===========
111|aaa|20010101
222|dfg|19990202
333|qwe|19990208
444|www|20001202
555|bbb|20020302
666|aaa|20030102

real    2m28.822s     biansj 的需约2分27秒,
user    2m25.220s     哦,好象是结果跟别人的有点出入 444 那一行,可能是漏了什么
sys     0m2.050s
==========rp.elium.pl===========
111|aaa|20010101
222|dfg|19990202
333|qwe|19990208
444|eee|20030311
555|bbb|20020302
666|aaa|20030102

real    0m51.667s      二流猫的大约是50秒钟
user    0m49.660s
sys     0m0.150s
==========rp.sleeve.sh===========
111|aaa|20010101
222|dfg|19990202
333|qwe|19990208
444|eee|20030311
555|bbb|20020302
666|aaa|20030102

real    0m16.763s      偶的,大约16秒钟,哈哈,赏自己一个冰淇淋~~~
user    0m15.710s
sys     0m0.190s
==========rp.taige.sh===========
111|aaa|20010101
222|dfg|19990202
333|qwe|19990208
444|eee|20030311
555|bbb|20020302
666|aaa|20030102

real    2m43.024s      taige的,大约是2分40秒
user    2m41.200s
sys     0m1.250s


你们不会打我吧? @_@

(急,拜托各位了)如何将文件中的若干行删除

:evil: 红袖姐,把心搁到肚里!






————————————————————
什么时候俺才能有红袖姐一半的智商呢?! :roll:

(急,拜托各位了)如何将文件中的若干行删除

臭袖子!!!
果然不错!!!
学习!!!

(急,拜托各位了)如何将文件中的若干行删除

-->

好你个红袖添香,请我吃冰淇淋,我要吃最大最贵的,宰死你! :wink:  :wink:

看你下一次还敢挑我毛病!

不过我牙不太好! :cry: :cry:

(急,拜托各位了)如何将文件中的若干行删除

-->

哈更大肆
:D

(急,拜托各位了)如何将文件中的若干行删除

哇塞,这么多人说你红袖姐!风紧!撤!


老头,俺也要吃,什么时候去,被忘了通知俺!

(急,拜托各位了)如何将文件中的若干行删除

高手啊
我明天开始也要学AWK和PERL

(急,拜托各位了)如何将文件中的若干行删除

...

:P

陪罪,陪罪!!!

(急,拜托各位了)如何将文件中的若干行删除

一个比一个牛,厉害,佩服:)

红袖妹妹,到上海,我请你吃冰激凌:)
最便宜的那种,呵呵,本人穷:)

(急,拜托各位了)如何将文件中的若干行删除

-->

哇噻!领导来视察来了~~~~

geee~~~  那肯定是不穷,穷者都挺大方的。肯定是个款爷!

打劫!!!举起手来!!!

(急,拜托各位了)如何将文件中的若干行删除

有我的份吗?

(急,拜托各位了)如何将文件中的若干行删除

...

有份有份,小怎么会亏待了我们的小侄女呢? :)

花 是偶们的斑竹,很好说话D~~~

(急,拜托各位了)如何将文件中的若干行删除

-->
在红袖姐姐的修正下,我重新在我的hp_ux下策是通过了你的脚本,谢谢你,
也谢谢红袖姐姐

(急,拜托各位了)如何将文件中的若干行删除

是我的疏忽

还是洪秀(全)强啊!

(急,拜托各位了)如何将文件中的若干行删除

-->

暈啊~~



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com