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: nacitani promene do cyklu  (Přečteno 1498 krát)

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
nacitani promene do cyklu
« kdy: 13 Června 2012, 10:50:39 »
Potreboval bych prejmenovat soubory a priradit ke kazdemu nazvu souboru hodnotu z dane rady. Zkousel jsem nasledujici, ale bezvysledku.

Kód: [Vybrat]
find | sort | for i in T1 T1 T2 T2 T4 T4; do echo $i; done
V zasade poterbuji postupne nacitat dvojici souboru (jedna se o 2 stejne fotky predmetu) a ty prejmenovavat. Tj. mam:

soubor1
soubor2
soubor7
soubor8
soubor10
soubor15

radu T5 T8 T9

a potrebuji to spojit na

soubor1_T5
soubor2_T5
soubor7_T8
soubor8_T8
soubor10_T9
soubor15_T9

Rada ani nazvy souboru netvori spojitou aritmetickou radu takze nejakym citacem v cyklu to nejde.

Zkousel jsem take pouzit dva for cykly, ale ty take nefunguji. respektive delaji to co maji a to ze ke kazde polozce z vnejsiho cyklu priradi vsechny polozky z vnitrinho for.

Kód: [Vybrat]
for i in T1_1 T1_2 T2_1 T2_2 T4_1 T4_2 T5_1 T5_2 T7_1 T7_2 T8_1 T8_2 T10_1 T10_2 T11_1 T11_2 T13_1 T13_2 T14_1 T14_2 T16_1 T16_2 T17_1 T17_2 T22_1 T22_2 T24_1 T24_2 T25_1 T25_2 T26_1 T26_2 T28_1 T28_2 T29_1 T29_2 T30_1 T30_2 T31_1 T31_2 T32_1 T32_2 T33_1 T33_2 T34_1 T34_2 T35_1 T35_2 T36_1 T36_2 T37_1 T37_2 T47_1 T47_2 T46_1 T46_2 T49_1 T49_2 T52_1 T52_2 T53_1 T53_2 T61_1 T61_2 T62_1 T62_2 T58_1 T58_2 T59_1 T59_2 T60_1 T60_2 T55_1 T55_2 T56_1 T56_2 T57_1 T57_2 T83_1 T83_2 T82_1 T82_2 T109_1 T109_2 T110_1 T110_2 T111_1 T111_2 T118_1 T118_2 T119_1 T119_2 T120_1 T120_2
  do for x in `find . | sort`
      do echo "$x" "$i"
  done
done
« Poslední změna: 13 Června 2012, 12:56:46 od Uran »
"Pouze text v MS Wordu je opravdu čistý, příteli."

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:nacitani promene do cyklu
« Odpověď #1 kdy: 13 Června 2012, 14:21:58 »
tak jestli jsem to správně pochopil
Kód: [Vybrat]
a=(T5 T8 T9)
j=0
for i in *; do echo "$i" "$i""_${a[(($j/2))]}"; j=$(($j+1)); done #jestli je to správně vyměníš echo za mv
#for i in *; do mv "$i" "$i""_${a[(($j/2))]}"; j=$(($j+1)); done

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:nacitani promene do cyklu
« Odpověď #2 kdy: 13 Června 2012, 16:37:08 »
tak jestli jsem to správně pochopil
Kód: [Vybrat]
a=(T5 T8 T9)
j=0
for i in *; do echo "$i" "$i""_${a[(($j/2))]}"; j=$(($j+1)); done #jestli je to správně vyměníš echo za mv
#for i in *; do mv "$i" "$i""_${a[(($j/2))]}"; j=$(($j+1)); done

Dekuji pole mi nejak utakla. Nejak to na ten muj pripad napasuji. Jeste abych tomu rozumel tak ten citac j uvnitr cyklu postupne bere hodnoty z pole a?
Jen by me zajimalo proc je tam $j/2 a ne jen $j?

Jinak jeste by me zajimalo jestli jde v ramci jednoho cyklu nejak pouzit dva a vice citacu? Napr. neco takoveho to, ale funkcniho. :)

Kód: [Vybrat]
j=0; i=0; for i in *; do echo "$j"; j=$(($j+1)); echo "$i"; i=$(($i+1)); done
"Pouze text v MS Wordu je opravdu čistý, příteli."

pacholik

  • Závislák
  • ***
  • Příspěvků: 2072
Re:nacitani promene do cyklu
« Odpověď #3 kdy: 13 Června 2012, 20:37:37 »
http://www.linuxexpres.cz/praxe/bash-5-dil-1

no je tam $j/2 protože chceš mít ty položky po dvou
Kód: [Vybrat]
krok $j $j/2 a[(($j/2))]
1 0 0 T5
2 1 0 T5
3 2 1 T8
4 3 1 T8
5 4 2 T9
6 5 2 T9

jasně že je to možné, ty tam akorát máš $i i ve for cyklu, stačí třeba
Kód: [Vybrat]
j=0; i=0; for file in *; do echo "$j"; j=$(($j+1)); echo "$i"; i=$(($i+1)); done

Uran

  • Aktivní člen
  • *
  • Příspěvků: 341
Re:nacitani promene do cyklu
« Odpověď #4 kdy: 14 Června 2012, 06:38:33 »
Ok. Dekuji. Uz je mi to jasne.

Vyreseno.
"Pouze text v MS Wordu je opravdu čistý, příteli."

 

Provoz zaštiťuje spolek OpenAlt.