こんにちは、テキストファイルから一度に1つのWordを読み取るためにcowsay
を取得する方法について疑問に思っています。現在、PuTTYを使用しているグラウンドゼロで、本当に助けが必要です。
これは、Word分割が実際に望ましいまれなケースのようです。
for Word in $(<file.txt); do cowsay "$Word"; sleep 1; done
(sleep
コマンドはオプションです)。または、常にxargs
があります。
xargs -a file.txt -n1 cowsay
すぐに思いついたものがあります。テストファイルに1行を入力してから、それをcowsayに送りました。
terrance@terrance-ubuntu:~$ cat cstest.txt
This is a test file to test cowsay
各行を読み取るように設定し、各行のfor loop
を実行して各Wordを読み取ります。以下の例:
:~$ 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 |
|| ||
$