Mur*_*lik 3 linux command-line bash shell-script
我在 foo 目录中有多个文件(100-1000)。我想将每个文件名附加到它自己的内容中。我认为 for 循环应该解决为每个文件附加一个随机字符串,
for f in *; do printf "%10s \n" $(shuf -i 50-100 -n 50 -r) >> $f; done
Run Code Online (Sandbox Code Playgroud)
如何将文件名附加到所有这些混洗过的数字中,直接将它们连接起来?
for f in *; do printf "%10s \n" $f $(shuf -i 50-100 -n 50 -r) >> $f; done
Run Code Online (Sandbox Code Playgroud)
结果在文件 5:
5
67
89
69
...
Run Code Online (Sandbox Code Playgroud)
预期结果:
567
589
569
...
Run Code Online (Sandbox Code Playgroud)
将结果存储shuf到 bash 数组中,然后在参数扩展中使用替换来添加$f:
mapfile -t shuf < <(shuf -i 50-100 -n 50)
printf '%10s \n' "${shuf[@]/#/"$f"}" >>"$f"
Run Code Online (Sandbox Code Playgroud)
使用 zsh,使用^参数扩展:
printf '%10s \n' "$f${(f)^"$(shuf -i 50-100 -n 50)"}" >> "$f"
Run Code Online (Sandbox Code Playgroud)
好的,如果我猜对了,您想在所有由shuf. 如果是这样,只需将该字符串添加到printf格式字符串的开头:
$ printf "x%10s\n" $(shuf -i 50-100 -n 3 -r)
x 71
x 70
x 92
Run Code Online (Sandbox Code Playgroud)
更改%10s以%s使它们背靠背而没有空格。同样,您可以改用循环变量:
$ for f in 1 2 3; do printf "$f%s\n" $(shuf -i 50-100 -n 2 -r); done
151
197
268
256
364
354
Run Code Online (Sandbox Code Playgroud)
添加>> "$f"重定向到文件。
请注意,由于固定部分是此处格式字符串的一部分,因此任何%符号和反斜杠都将由printf.