首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将文件名打印到自身中

问如何将文件名打印到自身中
EN

Unix & Linux用户
提问于 2020-07-09 11:04:46
回答 2查看 1.2K关注 0票数 3

我在foo dir中有多个文件(100-1000)。我想将每个文件名附加到它自己的内容中。我认为for循环应该解析为每个文件添加一个随机字符串,

代码语言:javascript
复制
for f in *; do printf "%10s \n" $(shuf -i 50-100 -n 50 -r) >> $f; done

我怎样才能把文件名附加到所有这些乱码中,直接连在一起?

代码语言:javascript
复制
for f in *; do printf "%10s \n" $f $(shuf -i 50-100 -n 50 -r) >> $f; done

结果在文件5中:

代码语言:javascript
复制
5
67
89
69
...

预期结果:

代码语言:javascript
复制
567
589
569
...
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-07-09 11:46:22

好的,如果我做对了,您需要在shuf打印的所有数字中加上一个固定字符串。如果是这样,只需将该字符串添加到printf格式字符串的开头:

代码语言:javascript
复制
$ printf "x%10s\n" $(shuf -i 50-100 -n 3 -r)
x        71
x        70
x        92

将%10s更改为%s,使它们在没有空格的情况下返回。类似地,您可以使用循环变量来代替:

代码语言:javascript
复制
$ 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解释。

票数 5
EN

Unix & Linux用户

发布于 2020-07-09 11:52:20

将shuf的结果存储到bash数组中,然后在参数展开中使用替换将$f放在前面:

代码语言:javascript
复制
mapfile -t shuf < <(shuf -i 50-100 -n 50)
printf '%10s \n' "${shuf[@]/#/"$f"}" >>"$f"

对于zsh,使用^参数展开:

代码语言:javascript
复制
printf '%10s \n' "$f${(f)^"$(shuf -i 50-100 -n 50)"}" >> "$f"
票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/597560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档