Pokaż wyniki 1 do 7 z 7

Temat: tekst linie wyżej jeśli powrót karetki (^M$)

  1. #1
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie tekst linie wyżej jeśli powrót karetki (^M$)

    Hej,

    dostaje dane w formacie:
    Kod:
    "23754" "tekst" "tekst"   "tekst"   "tekst"        "tekst"$
    "23755" "tek^M$
    st"     "tekst"      "tekst"     "tekst"  "tekst"$
    "43987" "tekst"     "tekst"       "tekst"   "tekst"  "tekst"$
    potrzebny wynik:
    Kod:
    "23754" "tekst" "tekst"   "tekst"   "tekst"        "tekst"$
    "23755" "tekst"     "tekst"      "tekst"     "tekst"  "tekst"$
    "43987" "tekst"        "tekst"     "tekst"    "tekst"$
    cat X | sed -e 's/\x0D/\x08/'

    ?
    ***********
    * markossx *
    ***********

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Kod:
    cat X | perl -e 's/\r\n/\n/; print;'
    Niektore linuxy maja tez polecenie fromdos i todos ktore konwertuje wlasnie znaki konca linii... a jak nie to perlem zaliczysz... ewentualnie

    Kod:
    perl -p -i -e 's/\r\n/\n/;' X
    to zrobi zamiane w miejsu bez kopii zapasowej, jak dasz -i .bak to stworzy ci .bak jeszcze
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Spoko, to ogarniam.
    Mam:

    Kod:
    "23754" "tekst" "tekst"   "tekst"   "tekst"        "tekst"$
    "23755" "tek^M$
    st"     "tekst"      "tekst"     "tekst"  "tekst"$
    "43987" "tekst"     "tekst"       "tekst"   "tekst"  "tekst"$
    Potrzebuję:

    Kod:
    "23754" "tekst" "tekst"   "tekst"   "tekst"        "tekst"$
    "23755" "tekst"     "tekst"      "tekst"     "tekst"  "tekst"$
    "43987" "tekst"     "tekst"       "tekst"   "tekst"  "tekst"$
    Póki co,zamieniłem ^M$ na dowolny znak,
    i mam wszystko jednej linii.
    Ostatnio edytowane przez markossx : 03-09-2014 - 21:25
    ***********
    * markossx *
    ***********

  4. #4
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ah sorry zle zrozumialem problem...
    Mozna na pare sposobow ale najprosciej i najczytelniej takie cos:

    Kod:
    while(<STDIN>) {
      if (/\r\n$/) {
        # linia urwana i konczy sie na CR+LF wiec czyscimy, doklejamy nastepna
        s/\r\n//;
        $_ .= <STDIN>;
      }
      print;
    }
    teraz cat X | filter.pl > Y i po sprawie
    Jedyny przypadek gdzie to nie zadziala jak powinno to gdy jedna linia jest przerwana nie raz ale 2+ razy ale wtedy mozna przepuscic przez filtr kilka razy :-)

    Jesli pliki sa takie ze mniej wiecej zmieszcza sie cale w RAM to mozna wczytac plik do tablicy i wtedy zrobic calosc za jednym zamachem ale sadze ze to jest ok, nawet gdyby trzeba kilka razy przepuscic przez filtr
    Ostatnio edytowane przez markossx : 03-11-2014 - 17:54
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Teraz proste...

    dzięki
    ***********
    * markossx *
    ***********

  6. #6
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Musiałem wrócić do tego i znalazłem moje rozwiązanie w bash,
    (wiedziałem, że nie będzie więcej niż 4)
    Kod:
    I=0
    while [ $I -ne 4 ]
    do
    echo $I
    if [[ `cat /tmp/SHIPTO.$I | grep $'\r' | wc -l` -gt 0 ]]
    then
       cat /tmp/SHIPTO.$I | $LINEUP > /tmp/SHIPTO.$(( $I+1 ))
    else
       echo
    fi
    ((I++))
    done
    Jeszcze inaczej?
    ***********
    * markossx *
    ***********

  7. #7
    Zarejestrowany
    Nov 2006
    Skąd
    Polska/Poland
    Postów
    1,191

    Domyślnie

    Przed użyciem filtra można sprawdzić długosć pliku na dysku,
    jak jest powtarzalna,znaczy że nie ma M$.
    ***********
    * markossx *
    ***********

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj