Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Sesijama 08 Prosince 2009, 23:29:40
-
Zdravím všechny
existuje nějaký skript, příkaz, program,... který by mi prohodil sloupce v txt (csv) souboru dle mé potřeby?
Např:
sloupec 1 sloupec 2 sloupec 3
na
sloupec 1 sloupec 3 sloupec 2
jeden program mi generuje txt s určitým uspořádáním sloupců. Ten potřebuju zpřeházet:) tak abych ho mohl naimportovat do jiného programu.
Předem díky moc za rady
Sesijama
-
hm.. zvladnul by to openoffice calc? naimportujes txt a pak pretahnes sloupce ciste teoreticky
-
Možná by to šlo i elegantněji, ale je to jen narychlo :)
awk -F" " '{print $2 " " $1 " " $3}' soubor123.txt > soubor213.txt
Vysvětlivky:
- -F" " -- za "F" se píše oddělovač sloupců, v tomto případě mezera, kdyby byly mezi sloupci dvojtečky, tak by to vypadalo "-F:"
- print $2 " " $1 " " $3 -- vezme sloupce tak, jak byly v původním souboru a vytiskne je v novém pořadí (tady druhý, první a třetí; ty uvozovky a mezery jsou tam jen proto, aby se mezi sloupci zase udělala mezera, kdyby tam měly být dvojtečky, tak stačí napsat dvojtečky)
- soubor123.txt -- vstupní soubor
- soubor213.txt -- výstupní soubor s přeházenými sloupci
-
Ještě verze pro případ dat s mezerami oddělené tabulátory (\t)
awk -F"\t" '{OFS="\t"; print $2,$1,$3}'
neboawk 'BEGIN {FS="\t"; OFS="\t"} {print $2,$1,$3}'
-
díky moc za rady :)
awk jsem objevil před chvílí ale jsem z toho zatim makovej :) takže vyzkouším podle vašich poznámek
Dám vědět výsledek
Sesijama
Tak jsem vyzkoušel a AWK je to co hledám :) dík moc. Mimochodem není nějaký manuál? Jestli to neumí i nějaké další vylomeniny s konverzí CSV souborů??
Sesijam
-
mestaci klasicky manual?
man awk
, popr. google:
http://www.google.sk/search?hl=sk&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=OwD&q=awk+cz&btnG=H%C4%BEada%C5%A5&meta=&aq=f&oq= (http://www.google.sk/search?hl=sk&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=OwD&q=awk+cz&btnG=H%C4%BEada%C5%A5&meta=&aq=f&oq=)
http://www.google.sk/search?q=awk+man+page+example&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a (http://www.google.sk/search?q=awk+man+page+example&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a)
konkretne: http://reboot.cz/howto/programovani/znate-awk-1-cast/articles.html?id=30 (http://reboot.cz/howto/programovani/znate-awk-1-cast/articles.html?id=30)
-
Díky moc za tipy
Já zkoušel pořád awk --? nebo awk --help. man awk mě nenapadlo :( .
Ještě jedna otázka. Zeptám se vás jako znalých této vynikající utility. Je možno při konverzi definovat např textový obsah prvního sloupce - prvního řádku, nebo druhého sloupce - prvního řádku, atd.?
Původní soubor má např v prvním sloupci v prvním řádku slovo Název, já chci prohodit sloupce (což už umím - a ještě jednou díky moc :)) a k tomu nahradit slovo Název slovem Jméno.
Je i toto možné?
Děkuji moc za ochotu a trpělivost.
Zdraví
Sesijama
-
Zdravím Vás,
Ještě jedna otázka. Zeptám se vás jako znalých této vynikající utility. Je možno při konverzi definovat např textový obsah prvního sloupce - prvního řádku, nebo druhého sloupce - prvního řádku, atd.?
Je i toto možné?
Sesijama
Jasoň !
Vytvořte si malý textový soubor typu *.awk, např. 'myAwk.awk' s tímto obsahem :
BEGIN {FS = "|"}
{MY_JMENO = "PLUKOVNIK PLECHANOV" }
{if ($1=="Název") $1="Jméno"}
{$2="Kozel"}
{$3="srtstnaty"}
{print $1 FS $2 FS $3 FS MY_JMENO FS $5 FS $6 FS}
a spusťte : cat muj_vtupni_soubor.txt|awk -f myAwk.awk > muj_vyst_soubor.txt
V prvním sloupci souboru muj_vyst_soubor.txt bude řetězec "Jméno", pokud byl původní obsah 1. sloupce vst. souboru řetězec " Název" (čili došlo k podmíněnému nahrazení).
Ve 2. sloupci výst. souboru bude hard řetězec "Kozel",
Ve 3. sloupci výst. souboru bude hard řetězec "srtstnaty",
ve 4. sloupci bude řetězec "PLUKOVNIK PLECHANOV" , v 5. a 6. sloupci bude obsah 5. a 6. sloupce z původního souboru.
Enjoy ! ;)
P.S. prohoďte si v myAwk.awk $5 <-> $6 a přesvědčte se, jak funguje princip záměn sloupců...
Edit : " Kozel srtstnaty" jest pouhým zoologickým výstřelkem. "Kozel srstnatý, byť
pouhým kozlem fiktivním, má přece jen k realitě blíže... :D
-
WOW... tak to je magie
takže laicky řečeno:
Pomocí AWK dokážu zkonvertovat CSV (TXT) soubor tak že mu prohážu sloupce a klidně i změním názvy sloupců v prvním řádku. Vynikající :)
Jen mi nejde do hlavy proč nejde v tomto řádku:
BEGIN {FS = "|"}
použít parametr pro mezery oddělené tabulátorem \t viz.:
BEGIN {FS = "\t"}
nebo dělám někde chybu?!?!
Sesijama
-
Zdravím Sesijama,
WOW... tak to je magie
takže laicky řečeno:
Pomocí AWK dokážu zkonvertovat CSV (TXT) soubor tak že mu prohážu sloupce a klidně i změním názvy sloupců v prvním řádku.
Ano.
Jen mi nejde do hlavy proč nejde v tomto řádku:
BEGIN {FS = "|"}
použít parametr pro mezery oddělené tabulátorem \t viz.:
BEGIN {FS = "\t"}
nebo dělám někde chybu?!?!
Sesijama
Bohužel, tuto část dotazu jsem nepochopil ... :( Můžete ji nějak více rozvést ?
Pokud máte na mysli zpracování vst. souboru, který má jako delimiters použity např. roury
(tedy delimiter je znak '|' ) a chcete, aby ve výst. souboru byly jako delimiters použity např. tabulátory (znak '\t'), tak to není problém... Viz příspěvky, které sem dali arrange, Vojtěch Trefný a linky , které sem dal petergula...
-
Bohužel, tuto část dotazu jsem nepochopil ... :( Můžete ji nějak více rozvést ?
Pokud máte na mysli zpracování vst. souboru, který má jako delimiters použity např. roury
(tedy delimiter je znak '|' ) a chcete, aby ve výst. souboru byly jako delimiters použity např. tabulátory (znak '\t'), tak to není problém... Viz příspěvky, které sem dali arrange, Vojtěch Trefný a linky , které sem dal petergula...
To byla moje chyba. Funguje to perfektně. Měl jsem chybu v kodu :(
Jinak díky moc všem za rady :)
Zdraví
Sesijama