Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: konverze txt (csv) na txt (csv) - prohození sloupců [vyřešeno]  (Přečteno 4143 krát)

Sesijama

  • Aktivní člen
  • *
  • Příspěvků: 112
    • Sesijama - technologie pro výrobu reklamy
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
« Poslední změna: 14 Prosince 2009, 21:51:45 od kiklhorn »

Šuohob

  • Závislák
  • ***
  • Příspěvků: 2171
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #1 kdy: 08 Prosince 2009, 23:35:15 »
hm.. zvladnul by to openoffice calc? naimportujes txt a pak pretahnes sloupce ciste teoreticky
Tak dlouho se vrzá s Acerem, až se displej utrhne.

Vojtěch Trefný

  • Příspěvků: 9307
  • Don Quijote
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #2 kdy: 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:
  • -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
« Poslední změna: 08 Prosince 2009, 23:54:07 od Vojtěch Trefný »

arrange

  • Závislák
  • ***
  • Příspěvků: 4031
  • "jdu s hlavou vztyčenou..."
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #3 kdy: 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}'
http://www.openstreetmap.org - mapy celého světa "wiki style"

Sesijama

  • Aktivní člen
  • *
  • Příspěvků: 112
    • Sesijama - technologie pro výrobu reklamy
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #4 kdy: 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
« Poslední změna: 09 Prosince 2009, 00:36:33 od Sesijama »

petergula

  • Stálý člen
  • **
  • Příspěvků: 1016
ntbk Dell 6420 (Amd Ati, Intel i7, 4GB RAM, 256GB SSD ...)
secondary/u svokrovcov:
Xubuntu (64bit) ntbk Asus A6Je (Ati X1450, Intel Core2Duo T5500, 2.5GB RAM ...)

Sesijama

  • Aktivní člen
  • *
  • Příspěvků: 112
    • Sesijama - technologie pro výrobu reklamy
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #6 kdy: 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

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #7 kdy: 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
« Poslední změna: 14 Prosince 2009, 21:57:29 od jfoot »
Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

Sesijama

  • Aktivní člen
  • *
  • Příspěvků: 112
    • Sesijama - technologie pro výrobu reklamy
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #8 kdy: 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

jfoot

  • Aktivní člen
  • *
  • Příspěvků: 197
  • ..nemožné ihned, zázraky do tří dnů...
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #9 kdy: 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...
« Poslední změna: 10 Prosince 2009, 17:07:04 od jfoot »
Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)

Sesijama

  • Aktivní člen
  • *
  • Příspěvků: 112
    • Sesijama - technologie pro výrobu reklamy
Re: konverze txt (csv) na txt (csv) - prohození sloupců
« Odpověď #10 kdy: 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

 

Provoz zaštiťuje spolek OpenAlt.