Partia transponuje plik oddzielony przecinkami

0

Chciałbym zmienić kolejność pliku z partią z tego schematu:

Default Web Site;anonymousAuthentication    
Default Web Site;windowsAuthentication
Daisy;anonymousAuthentication
Daisy;windowsAuthentication

do tego schematu:

Default Web Site;anonymousAuthentication;windowsAuthentication
Daisy;anonymousAuthentication;windowsAuthentication

Jak mogę to zrobić?

Michele
źródło
Witamy na stronie! Sprawdź nasze formatowanie kodu za pomocą {}przycisku. Ułatwia czytanie.
slhck 27.01.12

Odpowiedzi:

2

Oto twoje dane

$ cat  t13.dat
Default Web Site;anonymousAuthentication

Default Web Site;windowsAuthentication

Daisy;anonymousAuthentication

Daisy;windowsAuthentication

Oto jak wygenerować wynik

$ perl t13.pl t13.dat
Daisy;anonymousAuthentication;windowsAuthentication
Default Web Site;anonymousAuthentication;windowsAuthentication

Oto skrypt

$ cat t13.pl
#!/usr/bin/perl
use strict;
use warnings;

my %values;

while (<>) {
  chomp;
  next if /^\s*$/; # ignore empty lines
  my ($category, $value) = split /;/, $_, 2;
  $values{$category} .= ';'.$value;
}

for my $category (sort keys %values) {
  print "$category$values{$category}\n";
}

Wygląda na to, że używasz systemu Windows, najpierw zainstaluj Perla .


Jeśli twoje dane nie zawierają pustych linii i jesteś w porządku z nieco bardziej tajemniczymi rozwiązaniami:

$ perl -lanF\; -e'$v{$F[0]}.=";".$F[1]; END{print "$_$v{$_}" for keys %v}' t13.dat
Daisy;anonymousAuthentication;windowsAuthentication
Default Web Site;anonymousAuthentication;windowsAuthentication
RedGrittyBrick
źródło