小编Tho*_*wez的帖子

从文件中删除多个重复的行

我有一个在crontab中运行的Perl脚本,它生成一个包含重复条目的文件,因为在每次运行时它都会重写先前写入的信息.

我会使用一个sort -u文件,但是,我会在Perl脚本文件的末尾执行此操作.

我的列表

10/10/2017 00:01:39:000;Sagitter
10/11/2017 00:00:01:002;Lupus
10/12/2017 00:03:14:109;Leon
10/12/2017 00:09:00:459;Sagitter
10/13/2017 01:11:03:009;Lupus
12/13/2017 04:29:00:609;Ariet
10/11/2017 00:00:01:002;Lupus
10/12/2017 00:03:14:109;Leon
...
Run Code Online (Sandbox Code Playgroud)

我的代码

#!/usr/bin/perl

# Libraries
use strict;
use warnings 'all';

%lines = ();

# Remove duplicate

open( TMP_GL_OUTPUT, '>', $OUTPUT_FILE ) or die $!;

while ( <TMP_GL_OUTPUT> ) {
    $lines{$_}++;
}

open( OUTFILE, '>', $TMPOUTPUT_FILE ) or die $!;
print OUTFILE keys %lines;
close( OUTFILE );

close( TMP_GL_OUTPUT );
Run Code Online (Sandbox Code Playgroud)

我哪里错了?在shell中它比Perl感觉更短.

sort -u $TMPOUTPUT_FILE > $OUTPUT_FILE 
Run Code Online (Sandbox Code Playgroud)

正如ikegamy用户建议的那样,我做如下:

move $OUTPUT_FILE, …
Run Code Online (Sandbox Code Playgroud)

perl duplicates

2
推荐指数
1
解决办法
502
查看次数

Perl - 如果已存在于另一个数组中,则从数组中删除该元素

我有一个关于perl嵌入函数的问题.在您看来,"map"函数可以帮助我弹出一个数组中的所有元素,如果它已经存在于另一个数组中?

这些是数组:

名为OLDER_EVENTS的数组:

my @older_events = (
    surname => [
        qw(
            red
            brown
            simpson
            donald         
        )
    ],
    date => [
        qw(
            2018/02/14
            2018/03/09
            2018/05/01
            2018/08/02
        )
    ],
    time => [
        qw(
            01:00:52
            01:06:41
            03:24:31
            19:14:31            
        )
    ]
);
Run Code Online (Sandbox Code Playgroud)

ARRAY命名新元素:

my @new_events = (
    surname => [
        qw(
            simpson
            donald         
            blanco
            ernald
        )
    ],
    date => [
        qw(
            2018/03/09
            2018/08/02
            2018/08/01
            2018/08/14
        )
    ],
    time => [
        qw(
            03:24:31
            19:14:31            
            00:03:16
            09:21:45
        )
    ]
);
Run Code Online (Sandbox Code Playgroud)

在新事件中,最后两个条目是新的,因此,我会从@new_events中弹出元素1和2,因为它已经存在于@older_events中

我怎么能用智能解决方案呢?

我是否要使用第三个数组,或者,我可以从@older_events中弹出它吗?

感谢您的关注

arrays perl

1
推荐指数
1
解决办法
99
查看次数

标签 统计

perl ×2

arrays ×1

duplicates ×1