Merkkien käsittely

Hei,

Data on:
abbd
dbdb
adbd
babb

Miten voin toteuttaa tehokkaasti:
1. jokaiselta riviltä vain 2:detta ja 3:metta merkkiä tulee käsitellä
2. jos käsiteltävä merkki on b tulee se korvata merkillä _

Tällöin esimerkin datasta pitäsi saada:
a__d
d_db
ad_d
ba_b

Miten tämä,kiltit gurut kertokaa.

jos teen esim:
sed s/b/_/g
tämä ei toimi palauttaa:
a__d
d_d_
ad_d
_a__


Kiitä teitä
9103
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

Cut:lla 1. Merkki muuttujaan a, 2-3 muuttujaan b ja 4. C.
Sed:ität b:n
Tulos = a b c

Noin nyt äkkisellään, varmaan oikeasti fiksumpiakin tapoja olisi..

Äänestä
  • joo-o tuota kokeilin itsekkin, ihan siisti ja helppooteuttaa, mutta todella hidas.

    Tulisi muokata > 20MB tavaraa :(

    Tosin, tuota käytän koska parempaa en ole keksinyt :(

    Mietin vaan että olisiko sedissä käytössä string ranget ja miten?
    ^(.{2})

    Äänestä

  • samasss kirjoitti:

    joo-o tuota kokeilin itsekkin, ihan siisti ja helppooteuttaa, mutta todella hidas.

    Tulisi muokata > 20MB tavaraa :(

    Tosin, tuota käytän koska parempaa en ole keksinyt :(

    Mietin vaan että olisiko sedissä käytössä string ranget ja miten?
    ^(.{2})

    >> olisiko sedissä käytössä string ranget ja miten? >>
    Tässä yksi versio string rangesta, älkää vain kysykö miksi toimii (jos toimii :)

    $ cat koe
    adbd
    babb
    dbdb
    abbd

    $ cat koe | sed -e 's/\(^.\)\(b\)/\1\_/g' -e 's/\(^..\)\(b\)/\1\_/g'
    ad_d
    ba_b
    d_db
    a__d

    Äänestä

  • :wq kirjoitti:

    >> olisiko sedissä käytössä string ranget ja miten? >>
    Tässä yksi versio string rangesta, älkää vain kysykö miksi toimii (jos toimii :)

    $ cat koe
    adbd
    babb
    dbdb
    abbd

    $ cat koe | sed -e 's/\(^.\)\(b\)/\1\_/g' -e 's/\(^..\)\(b\)/\1\_/g'
    ad_d
    ba_b
    d_db
    a__d

    Hmm.. oisko tässä kyseessä se että b:n jälkeen jos on b, korvataan myös se?

    Äänestä

  • se alkupo kirjoitti:

    Hmm.. oisko tässä kyseessä se että b:n jälkeen jos on b, korvataan myös se?

    Juju on siinä, että tsekkaa mikä merkki on rivin alusta lukien toisena (^.)b ja kolmantena (^..)b

    $ cat data
    adbd
    babb
    dbdb
    abbd

    Ehkä havainnollisempaa, jos kumpikin etsi/korvaa ajetaan erikseen

    Mitä tapahtuu sarakkeessa 2:
    $ cat data | sed 's/\(^.\)b/\1_/g'
    adbd
    babb
    d_db
    a_bd

    Mitä tapahtuu sarakkeessa 3:
    $ cat data | sed 's/\(^..\)b/\1_/g'
    ad_d
    ba_b
    dbdb
    ab_d

    Eroa noilla on vain yhden pisteen verran. Ja nämä molemmat sedit yhdistettynä yhdeksi sediksi (huomaa option -e lisäykset):

    $ cat data | sed -e 's/\(^.\)b/\1_/g' -e 's/\(^..\)b/\1_/g'
    ad_d
    ba_b
    d_db
    a__d

    Nuo rumat harakanvarpaat johtuu haussa käytettyjen sulkeiden erityismerkityksen eskeippaamisesta bash-tulkilta. Sulkeitten sisällä oleva "search-pattern" säilytetään mukaan lopulliseen tulostukseen, siksi lisätty \1.
    http://www.grymoire.com/Unix/Sed.html#uh-4

    Äänestä

Kotitehtävät on tarkoittu kehittämään omia "ohjelmointi" taitoja.

Äänestä
  • On se vaan niin mukavaa saada aina joltain mokkulalta tällainen vastaus.

    Kiitos., olette eriomainen ihminen.

    Äänestä

  • se kysyjä kirjoitti:

    On se vaan niin mukavaa saada aina joltain mokkulalta tällainen vastaus.

    Kiitos., olette eriomainen ihminen.

    opiskelet alaa, miksi?

    Äänestä

  • olennainen kysymys kirjoitti:

    opiskelet alaa, miksi?

    En opiskele enää, valmistuin 1/2 vuotta sitten. Opiskelin koska ala on kiinnostava. Miksi opetat kun et osaa opettaa? tulisi sinun opetella itse.

    Mielestänne täällä tulisi vain:
    1. jakaa tietoa ilman että kukaan kysyy.
    2. olla kysymättä mitään.
    3. ihan vain v*lla täällä kysyjille, jos he jotain kysyvät.

    Olette varmaan todella sosiaalinen, kaikki rakavastavat ATK-opea.

    Äänestä

Kommentoi aloitusta


sediävaipythonia kirjoitti:

Hei,

Data on:
abbd
dbdb
adbd
babb

Miten voin toteuttaa tehokkaasti:
1. jokaiselta riviltä vain 2:detta ja 3:metta merkkiä tulee käsitellä
2. jos käsiteltävä merkki on b tulee se korvata merkillä _

Tällöin esimerkin datasta pitäsi saada:
a__d
d_db
ad_d
ba_b

Miten tämä,kiltit gurut kertokaa.

jos teen esim:
sed s/b/_/g
tämä ei toimi palauttaa:
a__d
d_d_
ad_d
_a__


Kiitä teitä

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