Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.

Autor Téma: Shell - čtení textového souboru znak po znaku  (Přečteno 3005 krát)

timmynovak

  • Člen
  • **
  • Příspěvků: 300
  • Karma: +9/-8
    • Zobrazit profil
Shell - čtení textového souboru znak po znaku
« kdy: 06 Květen 2009, 16:41:10 »
Ahoj, jde nějak v shellu přečíst jednoduše znak po znaku textový soubor? Myšlenka je, že potřebuji s každým znakem toho souboru něco udělat a pak jít na zpracování dalšího. Díky.

nettezzaumana

  • Host
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #1 kdy: 06 Květen 2009, 18:34:05 »
sed 's/\(.\)/\1\n/g' /etc/passwd ## rozlozi soubor na co znak, to radek, napriklad ..

.. spis ale prozrad jaka muka pro jednotlive znaky chystas :) ?!

timmynovak

  • Člen
  • **
  • Příspěvků: 300
  • Karma: +9/-8
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #2 kdy: 06 Květen 2009, 21:08:48 »
potrřebuji ten soubor po znaku poslat do dalšího programu, který jej zpracovává. Bohužel ten program je napsán dementně a očekává na vstupu pouz ejeden znak apak po něm potřebuji zajisti chvíli prostoj. tak jsem si říkal, že bych to udělal v shellu.

kkaarreell

  • Závislák
  • ****
  • Příspěvků: 1072
  • Karma: +120/-11
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #3 kdy: 07 Květen 2009, 08:31:08 »
bych radsi sahl po perlu ci jinym jazyku

timmynovak

  • Člen
  • **
  • Příspěvků: 300
  • Karma: +9/-8
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #4 kdy: 07 Květen 2009, 13:13:22 »
chci s tím mít co nejméně práce, perl neumím. v podstatě fakt nejde o nic jiného, než v shellu číst znak po znaku...

nettezzaumana

  • Host
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #5 kdy: 08 Květen 2009, 02:37:22 »
je to ale extremne pomaly ..

Kód: [Vybrat]
#!/bin/bash

usage() {
cat << 'EOF'
USAGE: brb <path_to_file> <interval_in_seconds_between_print_chars>

ADVANCED:
path_to_file    : cat ARGUMENT (in real)
interval_*      : sleep ARGUMENT (in real)

EXAMPLE:
foo | brb - 0.02 ## use foo cmd as input
brb "-n foo" 0.02 ## number all output lines

EOF
exit 1;
};

if test -z "$(echo $2 | sed '/^[0-9]\+\(\.[0-9]\+\)\?$/!d')"; then
        echo -e '!! bad interval !!\n';
        usage 1>&2;
fi

readcmd="cat $1";

($readcmd 2>/dev/null || usage 1>&2) | \
while read line; do
        trap 'echo; exit' INT;
        echo "$line" | \
        while IFS= read -n 1 char; do
                echo -n "$char";
                sleep $2;
        done;
  echo;
done;

« Poslední změna: 08 Květen 2009, 02:55:21 od nettezzaumana »

nettezzaumana

  • Host
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #6 kdy: 08 Květen 2009, 03:12:20 »
ad.1) dost by me zajimalo kde mam chybu, ze to je tak desne pomale:

> time (seq 1 1000 | ./xx.sh - 0 >/dev/null)

real    0m28.300s
user    0m2.292s
sys     0m2.584s

> time (seq 1 1000 | cat - >/dev/null)

real    0m0.009s
user    0m0.008s
sys     0m0.004s

2) pokud mi nekdo v bashi demonstruje, jak to napsat aby to bezelo lip, budu mu zavazan ..

zadani :: program cte znak po znaku vstup/file a mezi znaky je delay $d. program musi jit ukoncit pomoci ctrl+c

ps. dost rad bych to videl od nekoho ze zdejsich c/c++ masteru (a ze jich tu par je s pusou plnou kecu) ..

premet

  • Host
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #7 kdy: 08 Květen 2009, 07:56:58 »
ps. dost rad bych to videl od nekoho ze zdejsich c/c++ masteru (a ze jich tu par je s pusou plnou kecu) ..
Jako v Cčku ??

ufaak

  • Závislák
  • ****
  • Příspěvků: 2296
  • Karma: +177/-36
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #8 kdy: 08 Květen 2009, 07:58:07 »
co treba
Kód: [Vybrat]
#!/bin/bash

while read -n1 char; do
 echo "$char"
done <input.file
exit 0


edit: samozrejme by se to muselo doladit "k obrazu svemu" i s tim delay, ale nemyslim ze by to mel byt nejaky problem... nicmene jeste se valim v posteli, tak se tim nechci zabyvat :)
« Poslední změna: 08 Květen 2009, 08:40:14 od ufaak »
notebook MSI EX720X, Ubuntu 10.10

premet

  • Host
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #9 kdy: 08 Květen 2009, 08:33:25 »
Nebo v C něco takového ?
Kód: [Vybrat]
#include <stdio.h>

int main(int argc, char *argv[])
{
    if (argc != 2) {
       fprintf(stderr, "Chybny pocet argumentu\n");
       return 1;
    }

    FILE *fr;
    int c;

    if ((fr = fopen(argv[1], "r")) == NULL) {
        fprintf(stderr, "Soubor neexistuje\n");
        return 1;
    }

    while((c = fgetc(fr)) != EOF) {
        putchar(c);
    }

    if ((fclose(fr)) == EOF) {
         fprintf(stderr, "Soubor se nepodarilo ukoncit\n");
         return 1;
    }

    return 0;
}

EDIT: Ani tam "stdlib.h" být nemusí.
« Poslední změna: 08 Květen 2009, 10:52:23 od Premet »

ufaak

  • Závislák
  • ****
  • Příspěvků: 2296
  • Karma: +177/-36
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #10 kdy: 08 Květen 2009, 08:51:26 »
tak jsem tam dal i ten sleep...

Kód: [Vybrat]
#!/bin/bash

while read -n1 char; do
 echo "$char"
 sleep $2
done < $1
exit 0
notebook MSI EX720X, Ubuntu 10.10

jfoot

  • Člen
  • **
  • Příspěvků: 197
  • Karma: +38/-1
  • ..nemožné ihned, zázraky do tří dnů...
    • Zobrazit profil
Re: Shell - čtení textového souboru znak po znaku
« Odpověď #11 kdy: 08 Květen 2009, 09:47:48 »
Zdravim vsechny,
otazka na nettezzaumana :  Proc by mel byt problem resen na pude C | C++ ?
Pominu li fakt, ze tim opousti puvodni zadani (resit problem v shellu) pak
reseni problemu realizovane kompilovanym jazykem (C | C++) by ze sve podstaty
melo byt rychlejsi nez reseni provedene jazykem scriptovacim.
Pokud se tedy nepletu, proc nasleduje Vase vyzva :
 "...ps. dost rad bych to videl od nekoho ze zdejsich c/c++ masteru.." ?
Po šesté atomové válce  povrch planety Rogoz nevypadal pěkně...

Dítě nevinné...Co ty můžeš vědět...o sadomasochistické derivaci oidipovského komplexu...(O.Neff, K. Saudek, Arnal & Dva dračí zuby)