- gkaroly blogja
- A hozzászóláshoz be kell jelentkezni
- 1288 megtekintés
Hozzászólások
Mélyebb elemzés nélkül, első ránézésre egyszerűsítve kicsit, de messze nem eléggé:
echo "Vezetéknév;Keresztnév;Email" > lista.csv; cut -f3-4 -d ';' data.csv | sed -e 's/"//g' -e 's/ /;/g' | uniq >> lista.csv
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
echo "Vezetéknév;Keresztnév;Email" && lista.csv; cut -f3-4 -d ';' data.csv | sed -e 's/"//g;s/ /\;/g' | sort -u >> lista.csv
1) a sed-ben pontosvesszovel ossze lehet vonni utasitasokat, ekkor viszont a matchelt pontosvesszot vedeni kell
2) a uniq nem birkozik meg az alabbi szerkezettel:
- alma
- banan
- alma
- alma
Ugye itt az elvart mukodes a
- alma
- banan
lenne, ehelyett:
- alma
- banan
- alma
Lesz.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Látom láncolod a sed -et, elég egyetlen hívás is, a parancsokat -e bla -e bla2 formájában pakold mögé.
- A hozzászóláshoz be kell jelentkezni
Nem kerek a toretenet, hol lehetnek " -jelek amiket kiszedsz ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
A CSV formatum definicioja megengedi, hogy bizonyos cellakat idezojelekbe foglaljanak. Altalaban olyan cellak szoktak lenni ezek, melyekben szokoz, vesszo vagy pontosvesszo van, de nem kizaro ok az sem, ha nincs ilyen karakter a cellaban.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Ha ilyen iranybol kozelited meg, akkor esceplni is lehet, es igy meg nem helyes.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
De ember, így szól a CSV formátum. Lehetne \" meg \n is, de nem az.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
"""","""",""""
Ez mit ad decodolva ?
Mit fog adni 's/"//g' utan ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
1) Három darab oszlopot 1-1 idézőjellel.
2) Eltünteti a mezőkből az idézőjelet.
Márészt mit csinálsz ezzel pl?
"Kovacs Bela
120,5""",Tralala,123
Ez így egy érvényes CSV rekord.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Jeee :))
Azert kerdeztem, erdetileg, mert, ha nem a full CSV "szabvany" kovetes a cel, hanem az itt elofordulo dolgok kezelese, akkor lehet lenne egy egyszerubb megoldasom.
Mivel latjuk, hogy banik az " jelekkel, valoszinuleg nem az a cel.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Uhum, uhum, az ilyen miatt tudnám faszkorbáccsal azt kezelni, aki írta az előző árlista-konverterünket az ügyviteli rendszerünkhöz. Ugyan kitalálta, hogy legyen már CSV XLS helyett, mert azzal még tud PHP-ban dolgozni (árlistak jó része XLS, XLS, néhány XML és 1-2 CSV, TSV), csak épp ilyen apróságokat nem vett figyelembe, hogy hogyan is néz ki egy CSV. (Az egyéb borzalmakat, amit a karakterkódolással* és az XML** feldolgozással elkövetett borzalmakat, azokat ne is említsük.
Az ilyen és ehhez hasonló problémák miatt lett kivágva az egész a picsába és írtam helyette .NET-ben egy Excel Interopot használó programot. Na, azóta nincs gond az árlisták betöltésével. (Arról nem is beszélve, hogy a saleses kollégák helyből megúsznak egy felesleges konvertálási műveletet az Excellel, szimplán a nyers fájl mehet befele.)
* iconv mint olyan nem ismerete, excel által kiadott CSV kódolásának totális ignorálása, mindent str_replace-al feldolgozva, aztán "miért ilyen hülye a partner, hogy egy hangjegy karaktert rak a terméknévbe?!" felkiáltások és meglepődések.
** feldolgozás regexppel (facepalm), UNICODE kódolású XML "feldolgozása" str_replace-al, stb.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Vagy idézőjel, többsoros szöveg, stb.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
http://en.wikipedia.org/wiki/Comma-separated_values#Lack_of_a_standard
Tehát maximum ajánlásokról, meg "common sense" -ről beszélhetünk, de igen.
- A hozzászóláshoz be kell jelentkezni
http://www.ietf.org/rfc/rfc4180.txt - ezt illenek kovetni, de lattam eleg sok mast is :)
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Nalam a szabvanyos CSV az, amit az excel duplakattintasra megeszik. Nem veletlen, hogy mindenhova eroszakolom a pontosvesszot
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Azt nem locale szerint valasztja az excel ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Nem, a pontosvesszovel tagolt CSV-t minden rendszeren kerdes nelkul megnyitja, angol es magyar locale mellett is. Tapasztalatom szerint.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
En meg pont utalom ";" veszoset, 'C' mint pontos veszo nem adja, CSV erzest.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Arra ügyelj, hogy a data.csv fájlban ne legyen 2 keresztnevű ember, mert a
sed 's/ /;/g'
hibás működést fog eredményezni. Például "Kiss János Attila" esetén gond lehet a kimenettel.
-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.
- A hozzászóláshoz be kell jelentkezni
Avagy CSV-t parseolni shellből -> fail.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
cat lista.csv | awk 'BEGIN {FS=";"}{print $1}' >elso_oszlop.txt
cat lista.csv | awk 'BEGIN {FS=";"}{print $2}' >masodik_oszlop.txt
cat lista.csv | awk 'BEGIN {FS=";"}{print $3}' >harmadik_oszlop.txt
Ha a mezőelválasztó a
;
akkor nincs gond a space-ekkel és a 3, esetleg 4 szavas neveknél sem. Csak ; jel ne legyen a szöveg belsejében, hiszen az a mezőelválasztó a csv-ben
- A hozzászóláshoz be kell jelentkezni
De nagyon gonosz vagy! 3 kismacskat oltel meg ezzel a koddal.
awk 'BEGIN { FS = ";" } { print $1 >> "elso_oszlop.txt" ; print $2 >> "masodik_oszlop.txt"; print $3 >> "harmadik_oszlop.txt" }' lista.csv
Forras.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
ez tényleg szebb, sosem láttam így.
Így még szebb:
awk '\
BEGIN \
{ FS = ";" } \
{ print $1 >> "elso_oszlop.txt" ;\
print $2 >> "masodik_oszlop.txt"; \
print $3 >> "harmadik_oszlop.txt" \
}' lista.csv
- A hozzászóláshoz be kell jelentkezni
sot:
#!/usr/bin/awk -f
# splitter.awk
#
# Splits a 3-col CSV file into files each column goes into a separated file
BEGIN {
FS = ";"
}
{
print $1 >> "elso_oszlop.txt"
print $2 >> "masodik_oszlop.txt"
print $3 >> "harmadik_oszlop.txt"
}
es akkor: chmod +x splitter.awk && ./splitter.awk lista.csv
Vigyazz, en ilyenekben nagyon el tudok am szallni, ha felpiszkalnak...
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
eddig ez üti az awk-s háromsorosomat...
Azonban nincs varázsló arra nézve, van-e parancssori paraméter.
#!/usr/bin/awk -f
if [ $# -lt 2 ]; then
echo "Usage:"
echo " `basename $0` \"lista.csv\" " 1>&2
exit 1
fi
# folyt. előző
- A hozzászóláshoz be kell jelentkezni
Mondod neki, hogy az awk legyen az interpreter, majd ezzel mit sem törődve bash-ben írod a továbbiakat? Van awk-ban ARGV[] meg ARGC.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Mi a mennydorgos francnak olyan? Az AWK alapvetoen megiscsak szovegbuherator, nem scriptnyelv. Letezo dolog egyebkent, de akkor pont a szepseget oljuk meg a dolognak. Az awk ugyanis defaultbol a STDIN-rol olvas, ha nincs megadva neki forrasfajl. Es ez a legtobb esetben jo, ebben az esetben kulonosen. Mert itt akar meg curl-bol is be lehet csovezni a csv-t.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
:D :D :D :D
{0} ok boto
boto ?
- A hozzászóláshoz be kell jelentkezni
Mivel az eredeti feladat szerint a CSV fájlban szóköz az elválasztó karakter, így ez nem járható út.
Megoldási javaslat a több keresztneves problémára: Az első mező ($1) a vezetéknév, az utolsó mező ($NF) az email cím, a többi pedig keresztnév.
-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.
- A hozzászóláshoz be kell jelentkezni
awk jó erre is, bár az eredeti feladatban legfelül a szóköz, mint mezőelválasztó nem szerepelt
---
--- A gond akkor van, ha látszólag minden működik. ---
---
- A hozzászóláshoz be kell jelentkezni
„Vezetéknév Keresztnév Email felépítésű CSV fájl oszlopokra darabolása bash-el:”
Szerintem itt szerepel. Ne keverd össze azzal, hogy a
echo "Vezetéknév;Keresztnév;Email" > lista.csv;
utasítással kiír egy fejléc sort a kimeneti fájlba.
-----
A kockás zakók és a mellészabások tekintetében kérdezze meg úri szabóját.
- A hozzászóláshoz be kell jelentkezni
Egyébként jó látni, ahogy szenvedtek a shellel táblázatkezelés témakörében táblázatkezelő eszközök nélkül. ;)
Ilyenkor eszembe jut a bash vs PS-es topicból a "de a shellben kreatívabb lehetsz" beszólás. Az más kérdés, hogy a tényleges feladat megoldása helyett ahhoz kell kreatívkodni, hogy össze lehessen tákolni valahogy az adott feladatot.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Hmm.
hogy is mndjam...
Amikor postai etikettet akarsz egy hatalmas adatbázisból nyomtatni (kb. 14000 címzett) oly módn, hogy bizonyos személyeket nem kell bántani, de legyen a címben minden budapesti kerület római szám alsó-felső vízszintes jellel, de különben századpontossággal pozicionálva az etiketthez, szóval táblázatkezelőben befonod a hajad egy ilyentől.
Bashban Latex segítségével meg még kávézol is.
(Csináltam már ilyet pdf kimenettel de nem becsülték meg, így abbahagytam, utólag felvettek a feladatra 2 embert klikkelgetni valami micro$oftos szörnyben)
..szóval mi is a szenvedés?
- A hozzászóláshoz be kell jelentkezni
Táblázatkezelőben táblázatot kezelek, nem etiketteket nyomtatok. De látom, nem sikerült megfogni a dolog lényegét.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni