-F

Aug. 8th, 2011 08:55 am
ocehb: (Default)
[personal profile] ocehb
Есть файл типа

ERD_Sovetsk_22 Power: OK
ERD_Lenina_31 Power: PROBLEM
ERD_Svobody_1 Power: OK
Kommynist_33 is access: PROBLEM
ERD_Sovetsk_100 Power: PROBLEM
ERD_Partizan_98 Power: PROBLEM
Marksa_4 is access: PROBLEM
Revolucii_67 is access: PROBLEM
Marksa_4 is access: PROBLEM
Revolucii_67 is access: OK

Раскидать значения по статусу.


однострочник:

# perl -aF":\\s+" -lne 'push @{$a{$F[1]}}, $F[0];
  END{ print STDERR "PROBLEM: ", join ",", @{$a{PROBLEM}};
       print "OK: ", join ",", @{$a{OK}}; }' file


основную работу делает -aF":\\s+" и push, которые делят входящие строки и распихивают их по статусу в %a.


:)

Date: 2011-08-08 06:49 am (UTC)
From: [identity profile] jerom.livejournal.com
Ну явно же уродливо! Вот так и то лучше (но это первый взгляд):

perl -aF":\\s+" -lne 'if($F[1] eq "OK"){print $_}else{push @a, $_}END{ print STDERR $_ for @a' file

Date: 2011-08-08 09:38 am (UTC)
From: [identity profile] jerom.livejournal.com
Ну давай тогда так попробуем:
perl -aF":\\s+" -lne 'push@{$a{$F[1]}},$F[0];END{$"=",";print("$_: @{$a{$_}}"),*STDOUT=*STDERR for sort keys%a}' file

Date: 2011-08-08 09:38 am (UTC)
From: [identity profile] jerom.livejournal.com
Да, и с END всё-таки заменённым на }{

Date: 2011-08-08 08:02 am (UTC)
From: [identity profile] what-me.livejournal.com
сделал бы также. Разве что вместо END { ... } написал бы }{ ...

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 5th, 2026 11:41 pm
Powered by Dreamwidth Studios