使用 sed 或 awk 在变量行中插入变量

使用 sed 或 awk 在变量行中插入变量

我有两个变量(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) 。

但是,再次强调,使用文件的行号作为数据结构是洗牌的一种极其低效的方式。所以要小心。

相关内容