Nowe posty

Autor Wątek: porównanie dat  (Przeczytany 5407 razy)

jaro~123

  • Gość
porównanie dat
« dnia: 2014-08-08, 10:53:35 »
Witam Wszystkich,
mam problem z porównaniem dat przypisanych do zmiennych, wujek google wypluwa dużo wyników jednak nie wiele mi to pomaga, dlatego zarejestrowałem się na forum. Chciałbym zaznaczyć, że bash to dla mnie nowość, proszę więc o pomoc.
Problem przedstawia się następująco:

---
data_ostatniej_synchronizacji=$(stat -c %y plik)
data_ostatniej_synchronizacji=${data_ostatniej_synchronizacji%% *}
  tu otrzymuję date w formacie 2014-08-11

datę bierzącą modyfikuje o kilka dni w sposób:
data_porownania=$(date +%Y%-m%-d -d "$DATE - $dni_do_synchronizacji day")


pytanie w jaki sposób sprawdzić która jest mniejsza?

mój pomysł jest taki aby usunąc myślniki z daty i następnie je porównać, z datą bierzącą nie mam problemu, robie to tak:
data_porownania=$(date +%Y%m%d -d "$DATE - $dni_do_synchronizacji day")

problem mam z datą modyfikacji pliku czyli w jaki sposób zmodyfikować zawartość zmiennej usunąć z niej myślniki? próbowałem cut i awk ale bez efektów, a może są inne prostsze metody porównania dat? te które znalazłem w necie się nie sprawdzają w moim przypadku a nie potrafię ich zmodyfikować, proszę o pomoc i pozdrawiam Wszystkich forumowiczów

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
porównanie dat
« Odpowiedź #1 dnia: 2014-08-08, 11:05:58 »
Wyszukanie najstarszej daty z kilku - ostatni post w linku
http://www.debian.pl/threads/12900-Por%C3%B3wnywanie-dat-i-wybranie-jednej-bash

Porownanie 2 dat - przedostatni post w linku
http://forum.slackware.pl/viewtopic.php?t=19564
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

jaro~123

  • Gość
porównanie dat
« Odpowiedź #2 dnia: 2014-08-08, 11:11:20 »
widziałem ten post, ja szukam metody porównania dwóch zmiennych z wykorzystaniem funkcji IF

Offline vanhelzing

  • Users
  • Prawie jak Guru
  • ****
  • Wiadomości: 314
    • Zobacz profil
porównanie dat
« Odpowiedź #3 dnia: 2014-08-08, 11:59:13 »
Cytuj
pytanie w jaki sposób sprawdzić która jest mniejsza?
Wskazówka:
date +%s
stat -c %Z plik

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
porównanie dat
« Odpowiedź #4 dnia: 2014-08-08, 12:00:24 »
Ktory widziales?
Propo ciecia -
 przyklad:
 a="2014-08-11" ; echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g'
20140811
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

jaro~123

  • Gość
porównanie dat
« Odpowiedź #5 dnia: 2014-08-08, 12:24:37 »
Cytat: tele
Ktory widziales?
Propo ciecia -
 przyklad:
 a="2014-08-11" ; echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g'
20140811
super o to chodziło :) tylko proszę napisz mi jeszcze w jaki sposób mogę rezultat zamiast wyświetlić to zapisać do zmiennej

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
porównanie dat
« Odpowiedź #6 dnia: 2014-08-08, 13:13:11 »
Przyklad
 a="2014-08-11" ; b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b
20140811
PS:
Cytuj
mój pomysł jest taki aby usunąc myślniki z daty i następnie je porównać
Nie musisz wycinac - by porownac daty, przyklady wyzej sa wystarczajace. ( no chyba ze cos nie zrozumialem )

aaaa i jeszcze cos , jak zrobisz tak
date +%Y%m%d
20140808
to tez wyjdzie bez -
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

jaro~123

  • Gość
porównanie dat
« Odpowiedź #7 dnia: 2014-08-08, 13:45:34 »
konstrukcja:
b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b

zwraca u mnie taki błąd:
Syntax error: "(" unexpected (expecting "fi")

 :(

chyba źle opisałem mój problem na początku postu, więc napisże jeszcze raz, potrzebuję czegoś takiego:

if [ data_modyfikacji_pliku < (data_systemowa - Xdni) ]; then
  -----
  -----
else
  -----
  -----
fi


tele, o tym wiem:

date +%Y%m%d
20140808

mój problem polega na tym, że potrzebuje pobrać date modyfikacji pliku i zapisać ją bez myślników czyli coś w tym stylu:
  data_ostatniej_synchronizacji=$(stat -c %y data)
  data_ostatniej_synchronizacji=${data_ostatniej_synchronizacji%% *}
tyle, że taki kod wypluwa mi datę z myślnikami, i tu mam problem jak zmodyfikować zmienną data_ostatniej_synchronizacji aby prezentowała date bez myślników?

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
porównanie dat
« Odpowiedź #8 dnia: 2014-08-08, 14:10:34 »
Masz to w drugim linku od gory...
tylko zamiast
(data_systemowa - Xdni)
uzyj zmiennej

Edytowane
Moze to Ci sie przyda do ogarniecia zmiennych
http://wbzyl.inf.ug.edu.pl/sp/bash
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

jaro~123

  • Gość
porównanie dat
« Odpowiedź #9 dnia: 2014-08-08, 14:22:45 »
tele, masz racje nie zauważyłem tego linku :)
przepraszam za zamieszanie, już wszystko jest jasne
Dzieki

jaro~123

  • Gość
porównanie dat
« Odpowiedź #10 dnia: 2014-08-08, 14:41:26 »
Z przykrością muszę stwierdzić, że kod z drugiego linku od góry nie działa prawidłowo, niby jest ok ale nie porównuje dobrze dat w formacie 2014-08-01
skrypt wyświetla mi sprzeczne informacje to kawałek kodu:

  if [ x"$$data_ostatniej_synchronizacji" '<' x"$data_porownania" ]; then
    echo "$data_ostatniej_synchronizacji jest starsza od $data_porownania"
  else
    echo "$data_ostatniej_synchronizacji jest młodsza od $data_porownania"

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
porównanie dat
« Odpowiedź #11 dnia: 2014-08-08, 15:02:14 »
A co wyswietla i jakich dat uzyles?


Edytowane:
Pokaz log , wpisujac w terminalu:
bash -x ./nazwa_skryptu
z tym tez
Cytuj
konstrukcja:
b=(`echo $a | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b

zwraca u mnie taki błąd:
Syntax error: "(" unexpected (expecting "fi")
to zobaczymy co jest nie tak


Edytowane
I wklej wynik w znaczniki code tu na forum
http://forum.linux.pl/help.php#bbcode

Jesli skrypt jest bardzo dlugi dlugi to mozesz tylko fragmenty tu wkleic.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

jaro~123

  • Gość
porównanie dat
« Odpowiedź #12 dnia: 2014-08-08, 15:06:01 »
używam różnych tj pierwsza dat większa lub mniejsza i druga data większa lub mniejsza ciągle wypluwa drugą opcje tj echo po else

jaro~123

  • Gość
porównanie dat
« Odpowiedź #13 dnia: 2014-08-08, 16:02:30 »
I sprawa się wyjaśniła :)
tak to jest jak się człowiek bierze się za coś nowego,
skrypty uruchamiałem przez sh nazwa_pliku a nie bash nazwa_pliku :) wariant
b=(`echo $data_ostatniej_synchronizacji | grep -o '[^-]\\+' | sed ':a;N;$!ba;s/\\n//g' `) ; echo $b
działa :)