我想在文件的每一行的开头插入一个随机数(其中50个)。
for i in `seq 1 50`; do
r=$RANDOM
sed -e '{$i}s/^/$r,/' file1 > file2
done
如何让i变量在该sed命令中工作?
答案 0 :(得分:3)
如果你使用双引号而不是单引号,它将扩展bash变量,但是你还必须转义任何bash特殊字符
你可以做到
for i in `seq 1 50`; do
r=$RANDOM
sed -e "${i}s/^/$r,/" file1 > file2
done
事实上,你甚至可以在没有像这样的中间变量的情况下做到这一点
for ((i=1; i<51; i++)); do
sed -e "${i}s/^/$RANDOM,/" file1 > file2
done
虽然要注意file2实际上只包含你最后编辑的内容,因为你每次都会覆盖它。
如果您希望在file
中进行所有修改,可以使用-i
标记。使用GNU的版本,你可以做到
for ((i=1; i<51; i++)); do
sed -i -e "${i}s/^/$RANDOM,/" file1
done
然后file1将包含所有更改。
此外,您可以使用单个命令执行此操作而不为每个sed
运行awk
,例如
awk '{print int(rand() * 65536) ", " $0}' file1 > file2
将在0到65536之间给出一个随机int,可以根据需要随意修改该int。