
Hallo, Am Sun, 15 Jan 2012, Andre Tann schrieb:
David Haller, Dienstag, 22. November 2011: [...]
Daran gefällt mir nicht, daß ich awk und bash mische. Kann man das nicht auch gleich von awk erschlagen lassen?
Freilich. [...]
Jetzt wird das ganze doch noch etwas aufwendiger, und nun habe ich versucht, ob ich das in Perl abgebildet bekomme.
Wie wäre denn ein vernünftiger Programmablauf? Ich stelle mir vor:
Zuerst 1.txt in einen Hash einlesen, ID als Key-Spalte nehmen, als Value auf ein Array referenzieren. Dieses Array kriegt als erstes Element den Namen aus der Namensspalte, und als zweites Element einen String, der fortlaufend ergänzt wird, indem 2.txt eingelesen wird?
Das ist ja das was ich in awk gemacht habe. a2p macht aus meinem awk: ==== #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; # this emulates #! processing on NIH machines. # (remove #! line above if indigestible) eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift; # process any FOO=bar switches #!/usr/bin/gawk -f $, = ' '; # set output field separator $\ = "\n"; # set output record separator $_ = &Getline0(); if ($_ =~ /ID/) { $_ = &Getline0(); } if ($_ =~ /^[[:space:]]*=+[[:space:]]*$/) { $_ = &Getline0(); } while (($.-$FNRbase) > 1) { $ids{$Fld[(1)-1]} = $Fld[(2)-1]; $_ = &Getline0(); } line: while (<>) { chomp; # strip record separator @Fld = split(' ', $_, -1); if (/^[[:space:]]*=+[[:space:]]*$/) { next line; } $items{$Fld[(1)-1]} = $items{$Fld[(1)-1]} . ';' . $Fld[(2)-1]; } continue { $FNRbase = $. if eof; } printf "%2s\t%-15s\t%s\n", 'ID', 'Name', 'Gegenstände'; print '==================================='; foreach $id (keys %ids) { $s = '^[[:space:]]*;', $items{$id} =~ s/$s//; printf "%2i\t%-15s\t%s\n", $id, $ids{$id}, $items{$id}; } sub Getline0 { $FNRbase = $. if eof; if ($getline_ok = (($_ = <>) ne '')) { chomp; # strip record separator @Fld = split(' ', $_, -1); } $_; } ==== Man müßte nur noch $items{} vom ;-separierten String auf ein Array umstellen und das dann per 'join' ausgeben. HTH, -dnh --
Ich habe das ausprobiert, aber wenn ich das auf yes stelle dann stürzt der PC beim Booten ab. Was Nun? Dann stell es am besten wieder auf "no". -- Betrefflose Frage und Antwort in suse-linux -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org