我在 foo 目录中有多个文件(100-1000)。我想将每个文件名附加到其自己的内容中。我认为 for 循环应该解决为每个文件附加一个随机字符串的问题,
for f in *; do printf "%10s \n" $(shuf -i 50-100 -n 50 -r) >> $f; done
如何将文件名附加到所有这些打乱的数字中,直接连接它们?
for f in *; do printf "%10s \n" $f $(shuf -i 50-100 -n 50 -r) >> $f; done
结果文件5:
5
67
89
69
...
预期结果:
567
589
569
...
答案1
将 的结果存储shuf
到 bash 数组中,然后在参数扩展中使用替换来添加$f
:
mapfile -t shuf < <(shuf -i 50-100 -n 50)
printf '%10s \n' "${shuf[@]/#/"$f"}" >>"$f"
对于 zsh,使用^
参数扩展:
printf '%10s \n' "$f${(f)^"$(shuf -i 50-100 -n 50)"}" >> "$f"
答案2
好的,如果我没猜错的话,您想在 打印的所有数字前添加一个固定字符串shuf
。如果是这样,只需将该字符串添加到格式字符串的开头printf
:
$ printf "x%10s\n" $(shuf -i 50-100 -n 3 -r)
x 71
x 70
x 92
更改%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
添加>> "$f"
重定向到文件。
请注意,由于固定部分是此处格式字符串的一部分,因此任何%
符号和反斜杠都将由 解释printf
。