Portál AbcLinuxu, 5. května 2025 23:12

Dotaz: Bash - násobení po řádcích

22.11.2014 20:57 Ses | skóre: 16 | blog: Nevím nic, ale zato to vím správně | Ivančice
Bash - násobení po řádcích
Přečteno: 365×
Odpovědět | Admin
Zdravím, mám problém s hromadným převodem fotek. Situace se má tak, že mám v textovém souboru rozlišení fotografií v jednotkách pt (ve formátu výškaxšířka). Dále mám ve složce řadu fotografií, a jeden řádek v souboru s rozlišením, odpovídá jedné fotce ve složce (co řádek, to jedna fotka). Problém je v tom, že imagemagick (nástroj convert) neumí, nebo aspoň nevím jak, pracovat s jednotkami pt. Takže potřebuji změnit jednotlivé čísla z pt na px. Vím, že 1 pt = 1,328 pixelů. Ale nevím, jak napsat script, který by každé jednotlivé číslo přepočítal (a zároveň zanechal formát).

Zkoušel jsem googlit, ale ani tak se mi nepodařilo sestavit funkční script (bohužel nejsem v tomto příliš zběhlý).

Pokud by mi někdo pomohl, byl bych mu vděčný. :)
Nikdo mi nerozumí. Jsem záhadný.

Řešení dotazu:


Nástroje: Začni sledovat (2) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

wamba avatar 22.11.2014 21:43 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak přesně vypadá ten soubor? uveďte zkušení příklad jak vypadá vstup a jak by měl vypadat výstup

jestli jsou tam jen rozměry, tak třeba něco jako
echo '1240x1330'|perl -nE 'say join q{x}, map { int $_* 1.328+ .5} split q{x}'
This would have been so hard to fix when you don't know that there is in fact an easy fix.
22.11.2014 21:49 Ses | skóre: 16 | blog: Nevím nic, ale zato to vím správně | Ivančice
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
Soubor vypadá takto:
180.75x271.5
180.75x271.5
214.5x285.75
190.5x285.75
245.25x163.5
336.75x224.25
A pokračuje to dál (je tam 99 řádků). Díky za pomoc.
Nikdo mi nerozumí. Jsem záhadný.
22.11.2014 22:34 Dejv | skóre: 37 | blog: Jak ten blog nazvat ... ? | Ostrava
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
Ahoj

Vypocet z predchoziho prispevku (wamba) staci pouzit ve smycce
for r in $(cat rozmery.txt); do echo ${r} | perl -nE 'say join q{x}, map { int $_ * 1.328 + 0.5 } split q{x}' >> rozmery2.txt; done;
Pokud bys chtel presne rozmery, zmen to na
map { $_ * 1.328 }
Pevně věřím, že zkušenější uživatelé mě s mými nápady usměrní a pošlou tam, kam tyto nápady patří...
Řešení 1× (Ses (tazatel))
wamba avatar 22.11.2014 23:30 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
tam už smyčka je (v Perlu ten parametr 'n' automaticky přidává smyčku přes všechny řádky), tedy stačí
perl -nE 'say join q{x}, map { int $_ * 1.328 + 0.5 } split q{x}' rozmery.txt > rozmery2.txt
This would have been so hard to fix when you don't know that there is in fact an easy fix.
22.11.2014 23:58 Ses | skóre: 16 | blog: Nevím nic, ale zato to vím správně | Ivančice
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
Moc díky! Funguje to skvěle.

Teď ještě řeším, jak změnit rozlišení obrázku. Napsal jsem toto:

#!/bin/bash

cat rozlisenipx | while read radek; do

for file in *.jpg; do convert -quality 100 -resize $radek $file upr3/$file; done

done

Je to samozřejmě nesmysl. Dělá to to, že to vybere řádek s rozlišením, aplikuje ho na všechny fotografie, vezme druhý řádek a fotografie jím přepíše. Nicméně, nevím, jak to udělat tak, aby to fungovalo - tzn. vezme první řádek, vezme první fotku a upraví rozlišení. Poté vezme druhý řádek, druhou fotku a ...

Prosím o pomoc ještě s tímto a potom už dám pokoj. :)
Nikdo mi nerozumí. Jsem záhadný.
Řešení 1× (Ses (tazatel))
wamba avatar 23.11.2014 01:02 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
kdybych se měl držet vašeho skriptu tak asi
#!/bin/bash
cat rozlisenipx |for file in *.jpg; do read radek; convert -quality 100 -resize $radek $file upr3/$file; done
ale když nám napíšete celkově čeho chcete dosáhnout, tak poradíme lépe. tedy o co se snažíte?
This would have been so hard to fix when you don't know that there is in fact an easy fix.
23.11.2014 01:20 Ses | skóre: 16 | blog: Nevím nic, ale zato to vím správně | Ivančice
Rozbalit Rozbalit vše Re: Bash - násobení po řádcích
Mockrát děkuji! Funguje to skvěle. :)
Nikdo mi nerozumí. Jsem záhadný.

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.