ユーザー入力に応じてテキストを繰り返したいです。

ユーザー入力に応じてテキストを繰り返したいです。

私をパニックにさせる質問があります。というファイルがありますfilex.txt

$ cat filex.txt
I love my India.

ユーザーからの入力を受けて何度も印刷したい。以下に、テキストを30回自動的に繰り返して別のテキストファイルに入れる例を示します。

echo "Number of times you want to repeat:"
read repeat # for example user entered 30
cat link_no_follow.txt | perl -ne 'for$i(0..$repeat){print}' >filex2.txt

$repeatユーザー入力を保存するために変数を使用します。しかし、これはうまくいきません。誰かが私に解決策を与えることができますか?

答え1

perl実際にforループを使用する必要はなく、bashディレクトリを使用できます。次の例を考えてみましょう。

#!/bin/bash

content="$(cat filex.txt)"

echo -n "Number of times you want to repeat: "
read repeat

for ((i = 0; i < repeat; ++i)); do
    echo "${content}"
done

スクリプトは最初にその内容をfilex.txt名前付き変数として読み込みますcontent。その後、繰り返し回数を求めるプロンプトが表示され、それをユーザーから変数として読み込みますrepeat

次に、forループを使用してcontent repeat数を印刷します。ループの構造はfor次のとおりです。

for ((init; condition; update))

このinit部分はループの開始時に一度実行され、その部分がcondition評価されます。 true の場合、ループが実行されます。ループが完了したら、そのupdate部分を実行します。以下は状況を再評価することです。条件が偽になるまで続きます。 ++iうん、短縮i = i + 1

私が取得するスクリプトを実行すると、次のようになります。

$ ./ex.sh
Number of times you want to repeat: 3
I love my India.
I love my India.
I love my India.

答え2

一重引用符で囲まれたPerl式の中には、シェル変数はrepeat表示されません。

Perlを使って本当にこれをしたい場合は、次のことができます。

$ repeat=3
$ 
$ perl -ne 'BEGIN{$repeat = shift} print $_ x $repeat' "$repeat" filex.txt 
I love my India.
I love my India.
I love my India.

Perl引数ベクトル(暗黙的にvia shift)を使用してシェル変数の値を渡し、repeatそれをPerl変数に割り当てます$repeatfilex.txt複数の行が含まれている場合は、各行$repeatに対して順番に1回繰り返されます。

答え3

repeat変数のプロンプトと読み方が既にわかっているので、その値が5であるとします。

$ seq "$repeat" | xargs -I{} cat filex.txt
I love my India.
I love my India.
I love my India.
I love my India.
I love my India.

関連情報