我有两个变量(txt 和行号)我想在 x 行中插入我的 txt
card=$(shuf -n1 shuffle.txt)
i=$(shuf -i1-52 -n1)
“card”是我的txt:在洗牌“牌组”中随机选择的一张牌,我想将其插入随机行(i)
答案1
鉴于txt
已分配给您要添加的文本,并且i
已分配给要插入文本的行号,这将输出所需的内容:
$ awk -v line="$i" -v text="$txt" '{print} NR==line{print text}' /path/to/textfile
稍微修改一下以添加text
到指定的行号(除了已有的文本之外),而不是添加它后现有行i
(单独一行),如上面的代码所示:
$ awk -v line="$i" -v text="$txt" ' NR!=line{print} NR==line{print $0 text}' /path/to/textfile
答案2
使用文件作为数据结构会给应用程序带来严重的性能损失,但您可以foo
在行号处插入变量的内容i
,如下file.txt
所示:
printf '%s\n' "${i}i" "$foo" . x | ex file.txt
如果变量foo
包含换行符,则有一些边缘情况,但除此之外,无论任何特殊字符等如何,它都会起作用,只要变量i
具有有效的行号(即它不能大于 中的行数file.txt
) 。
但是,再次强调,使用文件的行号作为数据结构是洗牌的一种极其低效的方式。所以要小心。