|
|
|
|
Google Site
|
|||||||
| Forums | Registrer | Blogg | Man Pages | Forum Rules | Lenker | Album | FAQ | Brukere | Kalender | Søke | Dagens innlegg | Marker forumene som lest |
| Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her. |
![]() |
|
|
Thread Tools | Søk i denne tråden | Rate Thread | Visningsmoduser |
|
|||
|
hvordan å skille kolonnene med en fil i perl uten spesifikk skilletegn
Hi everybody,
Denne gangen Jeg har en sak i perl. Jeg må lage kommaseparert fil ved hjelp av følgende type informasjon. Problemet er søylene ikke har noen spesifikke skilletegn. Så mens du bruker splitt Jeg får forskjellig verdi. Noen der det er plass (S) og noen hvor det er kategorien (e). i noen tilfeller ikke jeg har verdier under enkelte kolonne og disse er også fylt med kategorien (e) og / eller plass (r). Revsn: Dato Hvem SID Beskrivelse av endring 09-Jul-01 Amiya 01-04Jul01 legge setdescriptor snarveier 02-Aug-99 RathA chk inkludere 1.linje fjerne per VandJ 06-Jan-98 DASP data foreldet ... 02-Jul-97 Gupts legge ddmm for fullstendighet Jeg vil ha min utgang som 09-Jul-01, ,01 Amiya-04Jul01, legger setdescriptor snarveier 02-Aug-99, RathA ,----, chk inkludere 1.linje fjerne VandJ (hvis linjen har kun beskrivelse, legg til forrige linje) 06-Jan-98, DASP ,----, data foreldet ... 02-Jul-97, Gupts ,----, legge ddmm for fullstendighet Takk på forhånd .... |
| Sponsede lenker | ||
|
|
|
|||
|
Prøv dette: Code:
perl -ne '
if (/^[0-9]{2}-[[:alpha:]]{3}-[0-9]{2}/) {
if (defined($prev)) { printf($prev . "\n"); }
($f1, $f2, $f3, undef, $f5) = m/([0-9]{2}-[[:alpha:]]{3}-[0-9]{2})[[:blank:]]+([[:alnum:]]+)[[:blank:]]+(([0-9]{2}-)?[0-9]{2}-?[[:alpha:]]{3}-?[0-9]{2}[[:blank:]])?(.*)/;
if ($f3 == "") { $f3="----" }
$prev = join(",",$f1,$f2,$f3,$f5);
} else {
$prev .= " " . chomp($_);
}
END { printf($prev . "\n"); }
' inputfile > outputfile |
|
|||
|
for å hjelpe en pålitelig løsning, må du definere hva dette feltet kan inneholde:
01-04Jul01 Det er alltid det samme format, eller kan det være annerledes dessuten bare ikke eksisterende? Har det alltid samsvarer med datoen på begynnelsen av linjen? |
|
|||
|
Code:
awk '{p=c; c=$0}; !/^[0-9]+/{print p,c;next}1' fileperl: Code:
while (<>) {
chomp;
$p = $c; $c = $_;
if (!/^[0-9]+/) { print "$p $c\n" ; next ; }
print $_ . "\n";
}Sist endret av ghostdog74; 07-13-2008 kl 12:12.. |
| Sponsede lenker | ||
|
|
![]() |
| Hugseliste |
| Tags |
| solaris |
| Thread Tools | Søk i denne tråden |
| Visningsmoduser | Ranger denne tråden |
|
|
Mer UNIX og Linux Forum Emner Du kan finne nyttig
|
||||
| Tråd | Tråd startet | Forum | Svar | Siste innlegg |
| Hvordan fjerne bestemte linjer fra filen med perl | dipakg | Shell programmering og Skripting | 4 | 06-11-2008 03:45 |
| Perl: Legge til kolonner i CSV-fil med informasjon i hvert | dolo21taf | Shell programmering og Skripting | 1 | 03-05-2008 02:52 |
| bytte plass med skilletegn i hele filen-perl | meghana | Shell programmering og Skripting | 11 | 02-19-2008 09:35 |
| cutting kolonner hvis skilletegn har mer enn ett charecter | mahabunta | UNIX for Dummies Spørsmål og svar | 9 | 09-14-2006 09:23 |
| Slette bestemte kolonner fra en fil | premar | Shell programmering og Skripting | 11 | 02-14-2006 07:02 |