Получая корсей, чтобы отправить одно слово за один раз в замазку

Привет просто интересно, как получить cowsay читать по одному слову за раз из текстового файла. Сейчас я нахожусь на первом месте, использую шпаклевку и действительно нуждаюсь в помощи.

3 ответа

Кажется, это редкий случай, когда разделение слов действительно желательно:

for word in $(<file.txt); do cowsay "$word"; sleep 1; done

(sleep команда необязательна). Или всегда есть xargs:

xargs -a file.txt -n1 cowsay

Вот то, что я придумал очень быстро. Я поместил одну строку в тестовый файл, а затем перевел ее на cowsay.

terrance@terrance-ubuntu:~$ cat cstest.txt 
This is a test file to test cowsay

Я установил его, чтобы прочитать каждую строку, а затем сделать for loop каждой строки, чтобы прочитать каждое слово. Пример ниже:

:~$ cat cstest.txt | while read line; do for word in $line; do cowsay $word; done; done
 ______
< This >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< is >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ___
< a >
 ---
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< file >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< to >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ________
< cowsay >
 --------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

Каждая отдельная строка этой команды будет выглядеть так:

:~$ cat cstest.txt | while read line
>do 
>for word in $line
>do 
>cowsay $word
>done
>done

Надеюсь это поможет!

Python однострочный:

python -c 'import sys,subprocess;[subprocess.call(["cowsay",w]) for l in sys.stdin for w in l.split()]' < words.txt

Образец прогона:

$ cat words.txt
this is a test
$ python -c 'import sys,subprocess;[subprocess.call(["cowsay",w]) for l in sys.stdin for w in l.split()]' < words.txt                 
 ______
< this >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ____
< is >
 ----
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ___
< a >
 ---
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
 ______
< test >
 ------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
$ 
Другие вопросы по тегам