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
)が含まれている場合に拡張を防ぐには、この設定を使用しないでください。