Hello!
Szeretnek egy kis segitseget kerni a kovetkezo problemaban:
adott jo par text file, amikbe be kene szurni ";"-t adott helyekre. (mindegyik fileban ugyan arra a poziciokra)
Meg lehet ezt oldani sed-el, vagy valahogy mashogy?
- 935 megtekintés
Hozzászólások
Pl sima szövegszerkesztő replace funkció?
- A hozzászóláshoz be kell jelentkezni
nem cserelni kell, hanem beszurni adott poziciokra es lehetoleg egyszerre tobb fileba
- A hozzászóláshoz be kell jelentkezni
A rövid válasz: meg.
Ha azt is megmondod, hogy mit jelent az adott pozíció (pl. n-edik sor m-edik oszlopába, vagy minden sor m-edikjébe), valószínűleg hosszabb válasz is lesz.
- A hozzászóláshoz be kell jelentkezni
adj egy [cenzúrázott] mintát [ha lehet minél többet, pastebin-en keresztül, stb], és h. hova kellenek a ";"-ok, és akkor tudnánk segíteni!
utána már csak find-ba kell rakni, és kész
és nem linux haladó, ha csak nem valami speck. regexp-el lehet csak megvalósítani:D
- A hozzászóláshoz be kell jelentkezni
:) akkor pastebin: http://pastebin.com/ufDKwzs4
poziciok ahova kell";": 15,31,35,39,99,129,142,153 oszlopok
pastebin elso soraba belefirkaltam, azt ne nezzetek.
- A hozzászóláshoz be kell jelentkezni
most kezdem, pár perc
ez már megvan:
echo "valami" | sed "s/.\{2\}/&\n/g"
nah
A proba.txt a pastebin-es minta, az első sort töröltem benne:
$ sed "s/.\{14\}/&;/" proba.txt | sed "s/.\{31\}/&;/" | sed "s/.\{36\}/&;/" | sed "s/.\{41\}/&;/" | sed "s/.\{102\}/&;/" | sed "s/.\{133\}/&;/" | sed "s/.\{147\}/&;/" | sed "s/.\{159\}/&;/" | head -10
67178008269050;AM2135000A3074 ;098 ;90 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000020.50 ;0001
67178008269051;AM2135000A3074 ;098 ;95 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000020.50 ;0001
67178008269052;AM2135000A3074 ;098 ;100 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000020.50 ;0002
67178008269053;AM2135000A3074 ;098 ;105 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000020.50 ;0001
67186004454050;AM2141000A3007 ;098 ;90 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000029.00 ;0001
67186004454051;AM2141000A3007 ;098 ;95 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000029.00 ;0002
67186004454052;AM2141000A3007 ;098 ;100 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000029.00 ;0002
67186004454053;AM2141000A3007 ;098 ;105 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000029.00 ;0001
67186004454153;AM2141000A3007 ;098 ;110 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000029.00 ;0001
67198008293048;AW2158000A3072 ;001 ;80 ;Cintura ;NoFib 100 % LEATHER ; ;000000000.00 ;0000023.00 ;0001
$
- A hozzászóláshoz be kell jelentkezni
a jo par text file alatt mit értesz? a nevük nélkül nem tudom find-ba rakni őket
amúgy most indulok kajálni, majd leszek 1h-ra múlva, sorry
- A hozzászóláshoz be kell jelentkezni
Ahogy bambano javasolta:
awk -vFIELDWIDTHS='14 16 4 4 60 30 3 11 999' '{ for (i=1; i<=NF; ++i) {printf( "%s"), $i ((i==NF) ?("\n") : ";") > FILENAME ".out"}}' valami_fajlnev_glob
(Azért a mezőhosszokat nézd át, mert nekem gyanús.)
- A hozzászóláshoz be kell jelentkezni
vegulis sed-el megoldottam :)
find -name "*.txt" -exec sed -i -f script {} \;
script tartalma:
s/\(.\{14\}\)/&;/;s/\(.\{31\}\)/&;/;s/\(.\{35\}\)/&;/;s/\(.\{41\}\)/&;/;s/\(.\{72\}\)/&;/;s/\(.\{103\}\)/&;/;s/\(.\{147\}\)/&;/;s/\(.\{159\}\)/&;/
valoban mezohosszokkal volt egy kis gond..
azert koszi mindenkinek!
- A hozzászóláshoz be kell jelentkezni
3 11 = 13 11
- A hozzászóláshoz be kell jelentkezni
igazabol fingom nem volt hova rakjam a kerdest
- A hozzászóláshoz be kell jelentkezni
szerintem a legegyszerűbb awk-val szétdarabolni azokon a határpontokon, ahova be kell szúrni és úgy íratni ki a sort, hogy közzé teszed a ;-t.
- A hozzászóláshoz be kell jelentkezni
vagy ha nem is kozze, de legalabb koze
t
- A hozzászóláshoz be kell jelentkezni