|
| Kan man fjerne en kolone fra en tekst fil? Fra : Julie Huffman |
Dato : 22-03-03 20:28 |
|
Kære læsere,
Jeg er ny til Perl, og kan derfor ikke ret meget, så jeg vil høre, om der er
nogen der kan hjælpe mig?
Det er sådan, at jeg har 600 tekst filer med måldata. Filerne ser sådan
her ud:
379,171 358,498 128,000 937,575 2,000
399,230 354,285 98,000 959,223 2,000
417,256 349,290 59,000 958,795 1,000
434,019 355,385 22,000 996,237 1,000
449,774 373,312 345,000 948,724 4,000
463,549 368,366 17,000 977,703 1,000
474,488 366,363 27,000 974,622 1,000
481,019 377,385 22,000 694,261 1,000
Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
fjerner den sidste kolonne fra alle 600 tekst filer?
Jeg bruger Linux og kolonerne er adskilt med tabulator.
Kærlig hilsen,
Julie
| |
Lars Balker Rasmusse~ (22-03-2003)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 22-03-03 21:10 |
|
"Julie Huffman" <julie@linuxmail.org> writes:
> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?
perl -pi.bak -e 's/\t\S+$//' filer...
--
Lars Balker Rasmussen "S.M.R.T."
| |
Julie Huffman (23-03-2003)
| Kommentar Fra : Julie Huffman |
Dato : 23-03-03 02:49 |
|
> perl -pi.bak -e 's/\t\S+$//' filer...
Jeg har nu læst manpages'ne til Perl og fundet udaf, hvad s/\t\S+$//
betyder. Det underlige er så, at den ikke fjerner den sidste kolone.
Hvis jeg fjerner $, så fjerne den kolone nr 2. Det kan jeg godt forstå,
hvorfor den gør.
Istedet for $ har jeg prøvet med \n og \r og \f, men vil bare ikke finde
slutningen af linien.
Kan du hjælpe mig igen?=)
Kh,
Julie
| |
Thorbjoern Ravn Ande~ (23-03-2003)
| Kommentar Fra : Thorbjoern Ravn Ande~ |
Dato : 23-03-03 09:50 |
|
"Julie Huffman" <julie@linuxmail.org> writes:
> Istedet for $ har jeg prøvet med \n og \r og \f, men vil bare ikke finde
> slutningen af linien.
Hvis filen stammer fra et DOS-system kan der være løse \r-tegn til
slut på linien. Sæt evt en \r* foran $.
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk/ravn
| |
Julie Huffman (23-03-2003)
| Kommentar Fra : Julie Huffman |
Dato : 23-03-03 11:29 |
|
> Hvis filen stammer fra et DOS-system kan der være løse \r-tegn til
> slut på linien. Sæt evt en \r* foran $.
Det viste sig, at der var whitespace lige inden "end of line".
Tak for tippet, jeg har nu skrevet \r* tricket ned i min perl log bog=)
Knus,
Julie
| |
Lars Balker Rasmusse~ (23-03-2003)
| Kommentar Fra : Lars Balker Rasmusse~ |
Dato : 23-03-03 10:20 |
|
"Julie Huffman" <julie@linuxmail.org> writes:
>> perl -pi.bak -e 's/\t\S+$//' filer...
>
> Jeg har nu læst manpages'ne til Perl og fundet udaf, hvad s/\t\S+$//
> betyder. Det underlige er så, at den ikke fjerner den sidste kolone.
Kan være der er whitespace efter sidste kolonne. Følgende er lidt
mere generelt:
s/\s+\S+\s*$//
--
Lars Balker Rasmussen "S.M.R.T."
| |
Julie Huffman (23-03-2003)
| Kommentar Fra : Julie Huffman |
Dato : 23-03-03 11:28 |
|
> Kan være der er whitespace efter sidste kolonne. Følgende er lidt
> mere generelt:
>
> s/\s+\S+\s*$//
Undskyld! Undskyld! undskyld. Det var der=)
Nu virker det helt perfekt! Tak.
Kys,
Julie
| |
Adam Sjøgren (22-03-2003)
| Kommentar Fra : Adam Sjøgren |
Dato : 22-03-03 21:13 |
|
On Sat, 22 Mar 2003 20:27:48 +0100, Julie Huffman wrote:
> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?
Hvis du starter med at vise hvad du har prøvet[1], så er der helt
sikkert en masse der kan hjælpe.
Hint: kig på funktionen split ("perldoc -f split").
Mvh.
Adam
[1] Og dermed tydeligt viser at du er indstillet på at gøre en indsats
selv, og ikke bare vil lokke nogen til at gøre arbejdet for dig.
--
"Computer science is no more about computers Adam Sjøgren
than astronomy is about telescopes." asjo@koldfront.dk
| |
Julie Huffman (23-03-2003)
| Kommentar Fra : Julie Huffman |
Dato : 23-03-03 11:49 |
|
> Hint: kig på funktionen split ("perldoc -f split").
Jeg har nok brug for din hjælp. I ovenståede tråd fik jeg løst problemet,
men jeg vil OGSÅ gerne lærer at bruge split.
Som jeg ser det, så vil jeg gerne finde sidste kolone erstatte den med
indenting, og join'e de forgående koloner.
Jeg sidder fast de steder, hvor der står problem.
join('problem', split(/\t\S+\s*$/, problem))
> [1] Og dermed tydeligt viser at du er indstillet på at gøre en indsats
> selv, og ikke bare vil lokke nogen til at gøre arbejdet for dig.
Undskyld. Det skal jeg nok gøre fremover=)
Kh,
Julie
| |
Adam Sjøgren (23-03-2003)
| Kommentar Fra : Adam Sjøgren |
Dato : 23-03-03 14:30 |
|
On Sun, 23 Mar 2003 11:49:10 +0100, Julie Huffman wrote:
> join('problem', split(/\t\S+\s*$/, problem))
Det regulære udtryk du giver split, skal kun matche det der er mellem
kolonnerne - dvs. \t.
,
--
"Computer science is no more about computers Adam Sjøgren
than astronomy is about telescopes." asjo@koldfront.dk
| |
Peter Makholm (24-03-2003)
| Kommentar Fra : Peter Makholm |
Dato : 24-03-03 08:41 |
|
"Julie Huffman" <julie@linuxmail.org> writes:
> Mit spørgsmål er så: Kan nogen hjælpe mig med at lave et program der
> fjerner den sidste kolonne fra alle 600 tekst filer?
Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
til de gode gammeldags unixværktøjer:
$ cut -f 1-4 indfil > udfil
--
Peter Makholm | If you can't do any damage as root, are you still
peter@makholm.net | really root?
http://hacking.dk | -- Derek Gladding about SELinux
| |
Julie Huffman (25-03-2003)
| Kommentar Fra : Julie Huffman |
Dato : 25-03-03 00:21 |
|
> Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
> til de gode gammeldags unixværktøjer:
>
> $ cut -f 1-4 indfil > udfil
Det var et smart trick! Det vidste jeg ikke man kunne i bash=)
Tak.
Kh,
Julie
| |
Steen Suder, privat (25-03-2003)
| Kommentar Fra : Steen Suder, privat |
Dato : 25-03-03 01:00 |
|
Julie Huffman wrote:
>>Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
>>til de gode gammeldags unixværktøjer:
>>
>>$ cut -f 1-4 indfil > udfil
>
>
> Det var et smart trick! Det vidste jeg ikke man kunne i bash=)
Det er heller ikke bash som sådan, men derimod et af de utallige små
programmer på en typisk (Linux/Unix)-boks.
--
Mvh. / Best regards,
Steen Suder < http://www.suder.dk/>
ICQ UIN 4133803
| |
Arne Schwerdtfegger (27-03-2003)
| Kommentar Fra : Arne Schwerdtfegger |
Dato : 27-03-03 08:25 |
|
Peter Makholm <peter@makholm.net> wrote in
news:87isu9mct4.fsf@xyzzy.adsl.dk:
> Og hvis man er træt af mystiske perl-one-liners kan man altid gribe
> til de gode gammeldags unixværktøjer:
>
> $ cut -f 1-4 indfil > udfil
*bølge* - jeg skulle selv til at foreslå cut.
--
Knud
| |
|
|