Versionumeron mukaan järjestäminen

Osaako joku neuvoa komennon, millä tulostaa tiedostojoukosta sen, jonka versionumero on viimeisin. Esim joukosta:

tiedosto-1.0.0
tiedosto-2.0.0
tiedosto-12.0.0
tiedosto-12.2.0
tiedosto-12.12.0

haluan tulokseksi:

tiedosto-12.12.0

Normaalilla sort-komennolla tuo valinta ei onnistu. Esim.

ls | sort -n | tail -n 1

palauttaa:

tiedosto-2.0

Mikä menee ihan metsään...
6280
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

myöskään 'ls --sort=v' ei auta tässä tapauksessa, koska haen listan tiedostoista http/ftp palvelimelta.

Äänestä
  • Mitäs tuo .bin mahtaa tehdä jos sen ajaa? Jääkö koneesta edes sauhuja jäljelle? Ei vain mutta näin pystyisi linuksissakin levittämään haittaohjelmia, itse en suostuisi ajamaan kyseistä biniä tietämättä varmasti mitä se sisältää, juuri tästä aiheesta on ollut keskustelua ja kiistelyä ja nyt jo tarjotaan tuntematonta ohjemaa ajettavaksi ;D

    mörkö.bin

    Äänestä

  • old_profile_3778 kirjoitti:

    Mitäs tuo .bin mahtaa tehdä jos sen ajaa? Jääkö koneesta edes sauhuja jäljelle? Ei vain mutta näin pystyisi linuksissakin levittämään haittaohjelmia, itse en suostuisi ajamaan kyseistä biniä tietämättä varmasti mitä se sisältää, juuri tästä aiheesta on ollut keskustelua ja kiistelyä ja nyt jo tarjotaan tuntematonta ohjemaa ajettavaksi ;D

    mörkö.bin

    Voihan asian noinkin nähdä,jos haluaa.

    Aiotko itse korjata sort komennon -n -option, joka ei tee sitä, mitä oma ohjelmani tekee, vaikka sen dokumentaation mukaa pitäisi niin tehdä.

    sort lienee kirjoitettu C:llä tai C :lla, noilla lähdekoodiltaan "selkeillä" kielillä, joten tehtävä ei liene vaikea sille, jonka mielestä C tai C ovat syntaksiltaan selkeitä.

    Oman ohjelmani "avain"osa, eli olennaisin funktio on esittelyltään tällainen:

    function NumericSortable(S:String):String;

    tuon funktion pituus on 39 riviä kylixillä käännettyä koodia. C -kielen hankalamman merkkijonokäsittelyn takia vastaava C -koodi saattaa olla pidempi.

    Eipä muuten minullakaan ole kylixin lähdekoodia, se onjossain Borlandilla lukkojen takana.

    Kukaan ei muuten estä tekemästä näin:

    1. buuttaa koneesi knoppix CD:llä, aseta rootille salasana, luo uusi käyttäjä,ja aja tuo ko.uudenkäyttäjän oikeuksilla.

    linuxissahan käyttäjällä on kirjoitusoikeus vain omaan kotihakemistoonsa alihakemistoineen,joskus myös /tmp :iin.

    Kuinka moni muuten tutkii linuxjakelunsa lähdekoodit läpikotaisin mahd. kierouksien paljastamiseksi, varsinkin kun linux -jakeluissa mukana olevat ohjelmat ovat suurelta osalta C ja C -koodia. Tuossa toki olisi paljon tehtävää, vaikka ne olisi koodattu esim. kylixillä.

    Sopii toki ihmetellä, miksi sort -komennolla on -n -optio, kun se ei tee mitään järkevää...

    Äänestä

  • Mika0800 kirjoitti:

    Voihan asian noinkin nähdä,jos haluaa.

    Aiotko itse korjata sort komennon -n -option, joka ei tee sitä, mitä oma ohjelmani tekee, vaikka sen dokumentaation mukaa pitäisi niin tehdä.

    sort lienee kirjoitettu C:llä tai C :lla, noilla lähdekoodiltaan "selkeillä" kielillä, joten tehtävä ei liene vaikea sille, jonka mielestä C tai C ovat syntaksiltaan selkeitä.

    Oman ohjelmani "avain"osa, eli olennaisin funktio on esittelyltään tällainen:

    function NumericSortable(S:String):String;

    tuon funktion pituus on 39 riviä kylixillä käännettyä koodia. C -kielen hankalamman merkkijonokäsittelyn takia vastaava C -koodi saattaa olla pidempi.

    Eipä muuten minullakaan ole kylixin lähdekoodia, se onjossain Borlandilla lukkojen takana.

    Kukaan ei muuten estä tekemästä näin:

    1. buuttaa koneesi knoppix CD:llä, aseta rootille salasana, luo uusi käyttäjä,ja aja tuo ko.uudenkäyttäjän oikeuksilla.

    linuxissahan käyttäjällä on kirjoitusoikeus vain omaan kotihakemistoonsa alihakemistoineen,joskus myös /tmp :iin.

    Kuinka moni muuten tutkii linuxjakelunsa lähdekoodit läpikotaisin mahd. kierouksien paljastamiseksi, varsinkin kun linux -jakeluissa mukana olevat ohjelmat ovat suurelta osalta C ja C -koodia. Tuossa toki olisi paljon tehtävää, vaikka ne olisi koodattu esim. kylixillä.

    Sopii toki ihmetellä, miksi sort -komennolla on -n -optio, kun se ei tee mitään järkevää...

    Siirrettävyys & päivitettävyys? Entä, jos joku päivä käytän ohjelmaasi kaupallisiin tarkoituksiin? Gnu:n C-kirjastoissa on funktio strverscmp() millä tuo valinta hoitu helposti, mutta en mielellään ala kirjoittamaan erillistä ohjelmaa; ensimmäinen lause mielessä.

    Äänestä

Taas piti kirjoittaa itse homma uusiksi. Standardityökaluilla homma hoituu vaikka näin...

#!/bin/bash

versioncmp() {

# Check if other NULL
if [ -z "$1" ] && [ -z "$2" ] ; then
return
fi

if [ -z "$1" ] && [ -n "$2" ] ; then
echo "$2"
fi

if [ -z "$2" ] && [ -n "$1" ] ; then
echo "$1"
fi

# Pad leading zeroes for lexical comparison; twice because of strange sed-behaviour
VER1=`echo "$1" | sed -r 's/([^0-9])([0-9][^0-9])/\10\2/g;s/([^0-9])([0-9][^0-9])/\10\2/g' `
VER2=`echo "$2" | sed -r 's/([^0-9])([0-9][^0-9])/\10\2/g;s/([^0-9])([0-9][^0-9])/\10\2/g' `

#echo "$VER1 > $VER2" > /dev/stderr

# Return greatest
if [[ "$VER1" > "$VER2" ]] ; then
echo "$1"
else
echo "$2"
fi
}

for f in `ls *.tar*` ; do
LATEST_VERSION=`versioncmp "$LATEST_VERSION" "$f"`
done

echo $LATEST_VERSION

Äänestä

Kommentoi aloitusta


mahajack kirjoitti:

Osaako joku neuvoa komennon, millä tulostaa tiedostojoukosta sen, jonka versionumero on viimeisin. Esim joukosta:

tiedosto-1.0.0
tiedosto-2.0.0
tiedosto-12.0.0
tiedosto-12.2.0
tiedosto-12.12.0

haluan tulokseksi:

tiedosto-12.12.0

Normaalilla sort-komennolla tuo valinta ei onnistu. Esim.

ls | sort -n | tail -n 1

palauttaa:

tiedosto-2.0

Mikä menee ihan metsään...

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu