• 我有这样一个文件:
    61.178.231.13 201110290239
    219.128.82.18 201110290446
    27.149.37.60 201110290752
    60.168.117.255 201110291009
    59.46.80.170 201110291102
    60.168.117.255 201110291104
    218.86.50.149 201110291107
    120.42.146.210 201110291151
    61.144.130.200 201110291151
    120.42.146.210 201110291152
    120.42.146.210 201110291153
    59.46.80.170 201110291200
    59.46.80.170 201110291203

    第一列是IP,第二列是时间,以空格分隔。
    我希望处理的结果是:
    去掉重复的IP行,如果IP相同,那么保留时间最近的行。
    即:
    120.42.146.210 201110291153
    218.86.50.149 201110291107
    219.128.82.18 201110290446
    27.149.37.60 201110290752
    59.46.80.170 201110291203
    60.168.117.255 201110291104
    61.144.130.200 201110291151

    方法一:

    awk '{a[$1]=$2>a[$1]?$2:a[$1]}END{for(i in a)print i,a[i]}' filename.txt

    方法二:

    sort -k1,1 -k2r filename.txt |uniq -w15

  • 3.9练习

    1. 写一个程序,将一些字符串(不同的行)读入一个列表中,逆向输出它。如果是从键盘输入的,那在Unix 系统中应当使用CTRL+D 表明end-of-file,在Windows 系统中使用CTRL+Z.
    2. 写一个程序,读入一串数字(一个数字一行),将和这些数字对应的人名(下面列出的)输出来。(将下面的人名列表写入代码中)。fred betty barney dino Wilma pebbles bamm-bamm
      例如,当输入为1,2,4 和2,则输出的为fred, betty, dino, 和betty
    3. 写一个程序,将一些字符串(在不同的行中)读入一个列表中。然后按ASCII 顺序将它们输出来。也就是说,当输入的字符串为fred, barney, wilma, betty,则输出为barney betty fred wilma。分别在一行或不同的行将之输出。

    1:
    #!/usr/bin/perl -w
    @michael=reverse(<>);
    print "@michael";
    或:
    #!/usr/bin/perl -w
    @userinput=;
    foreach (@userinput)
    {
    unshift (@array,$_);
    }
    print "array is @array\n";

    2:
    #!/usr/bin/perl
    @name=qw(fred betty barney dino Wilma pebbles bamm-bamm);
    @number=<>;
    foreach (@number)
    {
    print "$name[$_-1]\n";
    }

    3:
    #!/usr/bin/perl
    @array=<>;
    @array=sort @array;
    print "@array";

  • 2.12 练习

    1. 写一个程序,计算半径为12.5的圆的周长。圆周长等于2π(π约为3.1415926)乘以半径。答案为78.5。
    2. 修改上述程序,用户可以在程序运行时输入半径。如果,用户输入12.5,则应得到和上题一样的结果。
    3. 修改上述程序,当用户输入小于0 的数字时,程序输出的周长为0,而非负数。
    4. 写一个程序,用户能输入2 个数字(不在同一行)。输出为这两个数的积。
    5. 写一个程序,用户能输入1 个字符串和一个数字(n)(不在同一行)。输出为,n 行这个字符串,1 次1 行(提示,使用“x”操作符)。例如,如果用户输入的是“fred”和“3”,则输出为:3 行,每一行均为fred。如果输入为“fred”和“299792”,则输出为299792 行,每一行均为fred。

    1、2、3:
    #!/usr/bin/perl -w
    $pai=3.141592654;
    print "Please Input Radius:";
    $r=;
    if ( $r lt 0 ){
        print "The circumference is 0\n";
      }else{
        $l=$r*2*$pai;
        printf "The circumference is %.1f\n",$l;
    }

    4:
    #!/usr/bin/perl -w
    print "Please Input Number1:";
    $num1=;
    print "Please Input Number2:";
    $num2=;
    $product=$num1*$num2;
    print "The Product Is: $product\n";

    5:
    #!/usr/bin/perl -w
    print "Please Input a character string:";
    $character=;
    print "Please Input a Number:";
    $number=;
    $output=$character x $number;
    print $output;