|
|
|
|
Google Site
|
|||||||
| Forum | Registrera | Blogg | Manualsidor | Forum Regler | Länkar | Album | FAQ | Användare | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
![]() |
|
|
Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|||
|
hur man kan skilja spalterna av en fil i perl utan särskilda avgränsare
Hej alla,
Denna gång Jag har en fråga i perl. Jag måste skapa kommaseparerad fil med följande typ av information. Problemet är kolonnerna inte har några särskilda avgränsare. Så även använda delade jag får olika värde. En del där det finns plats (S) och en del där det är fliken (s). I vissa fall har jag inte värden under vissa specifika kolumn och dessa är också fylld med fliken (er) och / eller plats (er). Revsn: Datum Vem SID Beskrivning av Modification 09-Jul-01 Amiya 01-04Jul01 lägga setdescriptor genvägar 02-aug-99 Ratha chk omfatta 1. Line Ta bort per VandJ 06-Jan-98 DASP data föråldrade ... 02-Jul-97 Gupts lägga DDMM för fullständighetens Jag vill ha min produktion som 09-Jul-01, Amiya ,01-04Jul01, lägg setdescriptor genvägar 02-aug-99, Ratha ,----, chk omfatta 1. Linje bort VandJ (Om linjen har bara beskrivning, komplettera föregående rad) 06-Jan-98, DASP ,----, data föråldrade ... 02-jul-97, Gupts ,----, lägga DDMM för fullständighetens Tack på förhand .... |
| Sponsrade länkar | ||
|
|
|
|||
|
Prova detta: Kod:
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 |
|
|||
|
För att hjälpa till med en pålitlig lösning, måste du definiera vad området kan innehålla:
01-04Jul01 Det är alltid samma format eller kan det vara annorlunda dessutom bara inte finns? Svarar alltid samma dag i början av raden? |
|
|||
|
Kod:
awk '{p=c; c=$0}; !/^[0-9]+/{print p,c;next}1' fileperl: Kod:
while (<>) {
chomp;
$p = $c; $c = $_;
if (!/^[0-9]+/) { print "$p $c\n" ; next ; }
print $_ . "\n";
}Senast redigerad av ghostdog74; 07-13-2008 at 12:12.. |
| Sponsrade länkar |
|
|
![]() |
| Komihåglista |
| Taggar |
| Solaris |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| Ta bort de särskilda rader från filen med perl | dipakg | Shell-programmering och Skript | 4 | 06-11-2008 03:45 |
| Perl: lägga till kolumner i CSV-fil med information i varje | dolo21taf | Shell-programmering och Skript | 1 | 03-05-2008 02:52 |
| byta plats med avgränsare helt file-perl | meghana | Shell-programmering och Skript | 11 | 02-19-2008 09:35 |
| styckning kolumner om avgränsare har mer än en charecter | mahabunta | UNIX for Dummies Frågor & Svar | 9 | 09-14-2006 09:23 |
| Radera särskilda kolumner från en fil | premar | Shell-programmering och Skript | 11 | 02-14-2006 07:02 |