【发布时间】:2018-12-13 03:23:37
【问题描述】:
我有一个在 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
...
我的代码
#!/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 );
我哪里错了?在 shell 中感觉比在 Perl 中短。
sort -u $TMPOUTPUT_FILE > $OUTPUT_FILE
根据 ikegamy 用户的建议,我做了以下操作:
move $OUTPUT_FILE, $TMPOUTPUT_FILE; # Copy file
run [ 'sort', '-u', '--', $TMPOUTPUT_FILE ], '>', $OUTPUT_FILE; # Remove duplicate
unlink $TMPOUTPUT_FILE;
【问题讨论】:
-
您的代码无法编译(
$OUTPUT_FILE、$TMPOUTPUT_FILE和%lines未声明),并且您尝试从打开的文件中读取以进行输出(您在第一次打开时使用了>)。 -
首先,你打开
TMP_GL_OUTPUT是为了写,而不是读。 -
@Dada 感谢您的支持,我已经使用 ikegami 的命令解决了这个问题
标签: perl duplicates