Sziasztok!
Egy efféle FORRÁSból kellene az alábbi CÉL-félét létrehozni egy PERL szkripttel; azaz kezemben van egy szövegfájlra ráeresztett uniq -c|sort -nr eredménye, ahol a második szóközcsoporttól jön az "értékes" információ. Ebből szeretnék egy (négy számjegyen) sorszámozott listát, amiben ";" után 8 számjegyre (nullákkal) kiegészítetten áll a darabszám, majd újabb pontosvessző után az "értékes" információ.
FORRÁS (a számoszlop előtt még van egy oszlopnyi szóköz, csak itt elfedi a web):
1250 akármi innen
830 másvalami 134324 innen
718 Megint még valami
564 következik itt
560 ezek után
...
58 hosszan
3 hosszan hosszan
CÉL:
0001;00001250;akármi innen
0002;00000830;másvalami 134324 innen
0003;00000718;Megint még valami
0004;00000564;következik itt
0005;00000560;ezek után
...
0921;00000058;hosszan
0922;00000003;hosszan hosszan
- 1144 megtekintés
Hozzászólások
Hol akadtal el? Mi nem megy?
- A hozzászóláshoz be kell jelentkezni
Még csak ennyi van meg:
perl -p -w -e 's/^ */$.\;/;s/ /\;/' bemenet > kimenet
azaz a megfelelő méretűre bővítés hiányzik; ilyen a kimenet:
1;1250;akármi innen
2;830;másvalami 134324 innen
3;718;Megint még valami
4;564;következik itt
5;560;ezek után
...
921;58;hosszan
922;3;hosszan hosszan
- A hozzászóláshoz be kell jelentkezni
Üsse meg a kavics, egyszerűbb volt php-ben megcsinálnom:
<?php
$fn=file('bemenet');
foreach($fn as $fi=>$fn_) {
$db=(int)substr($fn_,0,8);
$li=substr($fn_,8);
print str_pad($fi+1,4,0,STR_PAD_LEFT).";".str_pad($db,8,0,STR_PAD_LEFT).";".$li;
}
?>
- A hozzászóláshoz be kell jelentkezni
awk '{printf "%04d;%08d;", NR, $1;
$1="";
print $0;}'
- A hozzászóláshoz be kell jelentkezni
Ez remek, köszi!
Még annyi, hogy egy felesleges szóköz bekerül a második pontosvessző után:
00000001;00004091; 00....
- A hozzászóláshoz be kell jelentkezni
Nincs mit, de mert Perl-t kértél, hát az is van :-)
$i=1;
while(<>){
chomp;
/(\w+) /;
$darab=$1;
s/^ *$1//;
s/^\ //;
printf "%04d;%08d;%s\n", $i, $darab, $_;
$i++;
}
- A hozzászóláshoz be kell jelentkezni
Jaaahhjj, zene füleimnek. Elolvadok az egy sorban kiférőktől (mert ez is olyan). Köszönöööm!
- A hozzászóláshoz be kell jelentkezni
while(<>){
printf "%04d;%08d;", $., /(\w+) /;
s/^ *$1 *//;
printf "%s", $_;
}
A darab változóra nincs szükség, a chomp is fölösleges, sőt, van olyan is, hogy "$." ami az awk-os NR-nek felel meg.
- A hozzászóláshoz be kell jelentkezni
perl -e '$n=1;while(<>){ s/[^0-9]*([0-9]+) //; printf("%04d;%08d;%s", $n++, $1, $_); }' bemenet>kimenet
- A hozzászóláshoz be kell jelentkezni
perl -MEnglish -ne '/^\s+(\d+) / && printf "%04d;%08d;%s", $., $+, $POSTMATCH'
- A hozzászóláshoz be kell jelentkezni