我在foo dir中有多个文件(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
...发布于 2020-07-09 11:46:22
好的,如果我做对了,您需要在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解释。
发布于 2020-07-09 11:52:20
将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"https://unix.stackexchange.com/questions/597560
复制相似问题