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

Název: konverze txt (csv) na txt (csv) - prohození sloupců [vyřešeno]
Přispěvatel: 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
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Šuohob 08 Prosince 2009, 23:35:15
hm.. zvladnul by to openoffice calc? naimportujes txt a pak pretahnes sloupce ciste teoreticky
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Vojtěch Trefný 08 Prosince 2009, 23:51:23
Možná by to šlo i elegantněji, ale je to jen narychlo :)

Kód: [Vybrat]
awk -F" " '{print $2 " " $1 " " $3}' soubor123.txt > soubor213.txt
Vysvětlivky:
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: arrange 09 Prosince 2009, 00:19:07
Ještě verze pro případ dat s mezerami oddělené tabulátory (\t)
Kód: [Vybrat]
awk -F"\t" '{OFS="\t"; print $2,$1,$3}'
nebo
Kód: [Vybrat]
awk 'BEGIN {FS="\t"; OFS="\t"} {print $2,$1,$3}'
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Sesijama 09 Prosince 2009, 00:27:42
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
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: petergula 09 Prosince 2009, 04:47:17
mestaci klasicky manual?
Kód: [Vybrat]
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)
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Sesijama 09 Prosince 2009, 12:04:26
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
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: jfoot 09 Prosince 2009, 12:38:42
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 :
Kód: [Vybrat]
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 :
Kód: [Vybrat]
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
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Sesijama 09 Prosince 2009, 21:55:37
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
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: jfoot 10 Prosince 2009, 13:24:27
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...
Název: Re: konverze txt (csv) na txt (csv) - prohození sloupců
Přispěvatel: Sesijama 13 Prosince 2009, 10:36:36
Citace

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