Portál AbcLinuxu, 19. července 2025 12:13


Dotaz: sed - zmena obsahu souboru

1.11.2007 11:20 Olda
sed - zmena obsahu souboru
Přečteno: 442×
Odpovědět | Admin
Poradil by někdo, jak pomocí sed (nebo jiným nástrojem?) změnit obsah souboru, který obsahuje např:

A xxx 5 B yyy 7

na výstup:

xxx;5; yyy;;7

Jde v podstatě v závislosti na hodnotě prvního sloupce přeházet pořadí dalších sloupců..
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.11.2007 11:25 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Můžete ten algoritmus pořádně popsat? Z toho jednořádkového příkladu naprosto netuším, co chcete vlastně udělat.
1.11.2007 14:44 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
tag <pre> je tvoj kamarat
If you hold a Unix shell up to your ear, you can you hear the C.
1.11.2007 15:00 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Proboha, jak může někdo položit dotaz, nepoužít náhled a ani se nakonec nepodívat, jak ten dotaz vlastně vypadá? Jinak tohle je úloha spíš pro awk než pro sed.
1.11.2007 14:53 marek
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ze zadani si nejsem jisty jestli chcete toto?:

sed -e"s/\([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \([^ ]\+\) \([^ ]\+\)/\2;\3;\5;;\6/" jmeno_Vaseho_souboru

Marek B.
1.11.2007 15:09 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jsou tam nějaké rozhodovací podmínky, šel bych osobně cestou jednoduchého prográmku v perlu. A ještě jednodušeji a přehledněji v pythonu, kdybych jej uměl :)
1.11.2007 19:58 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
Rozbalit Rozbalit vše Re: sed - zmena obsahu souboru
Odpovědět | | Sbalit | Link | Blokovat | Admin

Z toho zadání bych hádal, že potřebujete asi tohle:

s#A \([^ ]*\) \(.*\)#\1;\2;#
s#B \([^ ]*\) \(.*\)#\1;;\2#
...

A nebo jednoduše AWKem:

{
 if ($1=="A") fmt="%s;%s;";
 if ($1=="B") fmt"%s;;%s";
 ...
 printf(fmt "\n",$2,$3);
}

Ještě (malé) rýpnutí: trocha formátování (ne moc) dotazu by skutečně neškodila.

I am always ready to learn although I do not always like to be taught. (W. Churchill)

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.