ファイルの行を使用して文字列とファイル名を生成する

ファイルの行を使用して文字列とファイル名を生成する

foo.txt各行にフォルダ名を持つファイルがあります。

folder_1
folder_2
folder_3

私はこのようなことをしたい:

cat foo.txt | xargs -I {} echo 'function {}() { return stuff; }' > {}/function.js

つまり、ファイルを1行ずつ読み、各行を使用して文字列を作成し、その文字列が格納されているファイルの名前を作成したいと思います。

Bashのコマンドラインで同様の操作をどのように実行できますか?

答え1

ファイルのすべての行を繰り返すだけです。

while read line
do
    echo "function $line() { return stuff; }" > "$line/function.js"
done < foo.txt

もちろん、これはすでに存在していると仮定しますfoo.txt。それ以外の場合は、まずを使用して作成しますmkdir "$line"


awkループの代わりに使用する別の方法は次のとおりです。

awk '{printf("%s\n","function "$0"() { return stuff; }")>$0"/function.js"}' foo.txt

答え2

xargs+を使用してこれを行うことができますsh -c

<file1.txt xargs -d'\n' -L1 sh -c 'mkdir -p -- "$0"
printf %s\\n "function $0() { return stuff; }" >"$0"/function.js'

-I {}テキストファイルに奇妙なコンテンツ(などの行など- $'\n' \ $PATH)が含まれている場合に拡張を防ぐには、この設定を使用しないでください。

関連情報