A version sort szerintem nem igazán jó.
Nézzük az alábbi file-t:
cat sortbug.txt
NetworkManager-1.0.0-3.fc22
NetworkManager-0.9.10.0-11.git20140704.fc22
NetworkManager-1.0.2-1.fc22
NetworkManager-1.0.4-0.1.git20150618.8cffaf3bf5.fc22
NetworkManager-0.9.10.0-13.git20140704.fc22
NetworkManager-0.9.10.0-10.git20140704.fc22
NetworkManager-1.0.0-7.fc22
NetworkManager-1.0.4-0.1.git20160624.f245b49a.fc22
NetworkManager-1.0.0-1.fc22
NetworkManager-0.9.10.0-8.git20140704.fc22
NetworkManager-0.9.10.0-6.git20140704.fc22
NetworkManager-0.9.10.0-14.git20140704.fc22
NetworkManager-1.0.0-9.fc22
NetworkManager-1.0.0-4.fc22
NetworkManager-1.0.0-8.fc22
NetworkManager-1.0.0-6.fc22
NetworkManager-1.0.0-5.fc22
NetworkManager-0.9.10.0-12.git20140704.fc22
Rendezzük sorba:
sort -rV sortbug.txt
NetworkManager-1.0.4-0.1.git20150618.8cffaf3bf5.fc22
NetworkManager-1.0.4-0.1.git20160624.f245b49a.fc22
NetworkManager-1.0.2-1.fc22
NetworkManager-1.0.0-9.fc22
NetworkManager-1.0.0-8.fc22
NetworkManager-1.0.0-7.fc22
NetworkManager-1.0.0-6.fc22
NetworkManager-1.0.0-5.fc22
NetworkManager-1.0.0-4.fc22
NetworkManager-1.0.0-3.fc22
NetworkManager-1.0.0-1.fc22
NetworkManager-0.9.10.0-14.git20140704.fc22
NetworkManager-0.9.10.0-13.git20140704.fc22
NetworkManager-0.9.10.0-12.git20140704.fc22
NetworkManager-0.9.10.0-11.git20140704.fc22
NetworkManager-0.9.10.0-10.git20140704.fc22
NetworkManager-0.9.10.0-8.git20140704.fc22
NetworkManager-0.9.10.0-6.git20140704.fc22
Most azt tegyük félre, hogy a Fedora csomagkészítői megoldották az időutazást, de ettől különösképpen fel kellene cserélődnie az első két sornak szerintem. Ugyan nem tudom, a version sort hogyan működik, de a kötőjel, a pont, stb. egyfajta helyiérték kijelölő kellene legyen. Ha az első két sort nézem, a második bizony újabb, mint az első. A többit jól csinálja. Jut eszembe, coreutils verzió:
rpm -qf `which sort`
coreutils-8.23-10.fc22.x86_64
Ugye, érdemes bugreportot küldeni? (Már megtettem.)
- 4501 megtekintés
Hozzászólások
LC_ALL=C sort -rV sortbug.txt
is ezt produkálja?
- A hozzászóláshoz be kell jelentkezni
Igen, de azt ebben az esetben ignorálja.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nem, mert nem hiba. man sort ;)
-V, --version-sort
Sort version numbers. The input lines are treated as file names
in form PREFIX VERSION SUFFIX, where SUFFIX matches the regular
expression "(.([A-Za-z~][A-Za-z0-9~]*)?)*". The files are
compared by their prefixes and versions (leading zeros are
ignored in version numbers, see example below). If an input
string does not match the pattern, then it is compared using the
byte compare function. All string comparisons are performed in C
locale, the locale environment setting is ignored.
PREFIX es VERSION-re tud illeszteni, a tobbi pedig a SUFFIX reszbe esik, ami alapjan nem rendez.
- A hozzászóláshoz be kell jelentkezni
Nem állítom, hogy világos. Mi a PREFIX, VERSION és SUFFIX definíciója itt? Mert mintha csak a SUFFIX-re adna egy regexp-et, de épp arra nem rendez. Szóval mi is a prefix, és a version most? Továbbá mi az értelme, ha ezen a konkrét példán elbukik? Valós scriptem kergült meg miatta, elkezdtem debugolni, aztán kiderült, hülyeséget ad vissza a sort. Volt újabb NetworkManager csomag a Koji build szerveren, mint a gépemen lévő változat, az erre tenyésztett scriptem pedig kiröhögött, és azt mondta, nincs újabb. Aztán kiderült, hazudik a sort.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Amit sortolgatsz, az nem felel meg a verziószámnak.
https://www.gnu.org/software/coreutils/manual/html_node/Details-about-v…
PREFIX = NetworkManager-
VERSION = 1
SUFFIX = .0.4
Ezt nem rendezi: -0.1.git20160624.f245b49a.fc22 - Ez nem csak az első két sorból derül ki.
- A hozzászóláshoz be kell jelentkezni
Szerintem a VERSION az 1.0.4, amit te írtál az a major verzió. A suffix a kötőjel utáni rész lesz.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Amit itt leirtal, az amugy se egyezik meg nagyjabol senkinek a definiciojaval a verziot illetoen, legfeljebbb a CentOS/Fedora community definialja igy a verzioszamot. A verzioszam ugyanis egy egeszen konkret valami, ami a vilag ertelmesebbik felen igy nez ki: 1.0.4. Major, minor, build. That's all, nothing more.
--
Blog | @hron84
Üzemeltető macik
- A hozzászóláshoz be kell jelentkezni
Azt értem, hogy így csinálja, de szerintem értelmesebb lenne úgy, hogy amennyiben a PREFIX és a VERSION egyezik, akkor nem random hagyja a fenébe a sorrendet, hanem SUFFIX alapján rendezzen.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
PREFIX VERSION SUFFIX
Példa:
NetworkManager- 1.0.0-3 .fc22
Így módosítva a txt-ben a sorokat szépen rendezi.
- A hozzászóláshoz be kell jelentkezni
Különben az jutott még eszembe, hogy ha a SUFFIX szerint is rendezne, az kompatibilis lenne a jelenlegi változattal, hiszen elsősorban PREFIX, másodsorban VERSION, harmadsorban SUFFIX szerint rendezne. Most csak az első kettő szerint. Na jó, picit lassabb lenne, de legalább jó.
Ezt úgy értem, hogy azonos prefixen belül verzió szerint, azonos prefix és verzió esetén suffix szerint volna jó.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Többen kifejtették már, hogy a version az elég kötött formát igényel.
Azonban neked a "-h --human-numeric-sort" várhatóan megfelel.
Legalábbis az jól rendezi ezt a halamzt ;)
--
zrubi.hu
- A hozzászóláshoz be kell jelentkezni