|
|
|
|
Bonjour,
Comment faire pour enlever les lignes apparaissant plusieurs fois dans un fichier et n'en garder qu'une seule.
Par exemple: fichier tmp:
Apr 17 11:42:36 chatelet kernel: scsi1:0:2:0: Device is active, asserting ATN
Apr 17 11:42:36 chatelet kernel: Recovery code sleeping
Apr 17 11:42:36 chatelet kernel: (scsi1:A:2:0): Abort Message Sent
Apr 17 11:42:36 chatelet kernel: (scsi1:A:2:0): SCB 3 - Abort Completed.
Apr 17 11:42:36 chatelet kernel: Recovery SCB completes
Apr 17 11:42:36 chatelet kernel: Recovery code awake
Apr 17 11:42:36 chatelet kernel: aic7xxx_abort returns 0x2002
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x53) SCSIRATE(0x98)
Apr 17 11:42:36 chatelet kernel: (scsi1:A:2:0): SCB 3 - Abort Completed.
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x53) SCSIRATE(0x98)
Apr 17 11:44:38 chatelet kernel: scsi1:0:2:0: Attempting to queue an ABORT messa
ge
Apr 17 11:44:38 chatelet kernel: CDB: 0x1a 0x8 0x1d 0x0 0x18 0x0
Apr 17 11:44:38 chatelet kernel: scsi1: At time of recovery, card was not paused
Apr 17 11:44:38 chatelet kernel: >>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<
<<<<<<<<<<<<
Apr 17 11:44:38 chatelet kernel: scsi1: Dumping Card State in Message-in phase,
at SEQADDR 0x172
Apr 17 11:44:38 chatelet kernel: Card was paused
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x84) SCSIRATE(0x98)
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x85) SCSIRATE(0x98)
et enlever les lignes qui apparaissent plusieurs fois pour a la fin obtenir dans ce même fichier tmp:
Apr 17 11:42:36 chatelet kernel: scsi1:0:2:0: Device is active, asserting ATN
Apr 17 11:42:36 chatelet kernel: Recovery code sleeping
Apr 17 11:42:36 chatelet kernel: (scsi1:A:2:0): Abort Message Sent
Apr 17 11:42:36 chatelet kernel: (scsi1:A:2:0): SCB 3 - Abort Completed.
Apr 17 11:42:36 chatelet kernel: Recovery SCB completes
Apr 17 11:42:36 chatelet kernel: Recovery code awake
Apr 17 11:42:36 chatelet kernel: aic7xxx_abort returns 0x2002
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x53) SCSIRATE(0x98)
Apr 17 11:44:38 chatelet kernel: scsi1:0:2:0: Attempting to queue an ABORT messa
ge
Apr 17 11:44:38 chatelet kernel: CDB: 0x1a 0x8 0x1d 0x0 0x18 0x0
Apr 17 11:44:38 chatelet kernel: scsi1: At time of recovery, card was not paused
Apr 17 11:44:38 chatelet kernel: >>>>>>>>>>>>>>>>>> Dump Card State Begins <<<<<
<<<<<<<<<<<<
Apr 17 11:44:38 chatelet kernel: scsi1: Dumping Card State in Message-in phase,
at SEQADDR 0x172
Apr 17 11:44:38 chatelet kernel: Card was paused
Apr 17 11:43:38 chatelet kernel: (scsi1:A:2:0): parity error detected in Data-in
phase. SEQADDR(0x84) SCSIRATE(0x98)
je ne sais vraiment pas comment faire
Merci
Configuration: Windows XP Internet Explorer 7.0
Salut,
root@debian:~# cat tonixm.txt
aaa
bbb
bbb
ccc
ddd
ddd
eee
fff
root@debian:~# cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
open LIRE,"tonixm.txt";
my %vu=();
my @unique;
@unique = grep { ! $vu{$_} ++ } <LIRE>;
print for @unique;
__END__
root@debian:~# perl ccm.pl
aaa
bbb
ccc
ddd
eee
fff
root@debian:~#
106485010510997108 |
Merci lami20j comme d'hab ;)
|
Oui, bien sûr ;-) root@debian:~# cat tonixm.txt
aaa
bbb
bbb
ccc
ddd
ddd
eee
fff
root@debian:~# cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
open LIRE,"tonixm.txt";
open ECRIRE ,">tonixm.focal";
my %vu=();
my @unique;
@unique = grep { ! $vu{$_} ++ } <LIRE>;
print ECRIRE @unique;
__END__
root@debian:~# perl ccm.pl
root@debian:~# cat tonixm.focal
aaa
bbb
ccc
ddd
eee
fff
root@debian:~#Voici une autre version sans @uniqueroot@debian:~# cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;
open ECRIRE ,">tonixm.focal";
my %vu=();
print ECRIRE grep { ! $vu{$_} ++ } qx/cat tonixm.txt/;
__END__
Cette fois l'écriture se fait directement dans le fichier tonixm.focal
106485010510997108 |