我有一个在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嵌入函数的问题.在您看来,"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中弹出它吗?
感谢您的关注