【发布时间】:2015-06-02 11:04:12
【问题描述】:
我想使用“sed”在文件的每一行中用随机数替换所有出现的数字。 例如,如果我的文件每行都有数字 892,我想用 800 到 900 之间的唯一随机数替换它。
输入文件:-
temp11;djaxfile11;892
temp12;djaxfile11;892
temp13;djaxfile11;892
temp14;djaxfile11;892
temp15;djaxfile11;892
预期的输出文件:-
temp11;djaxfile11;805
temp12;djaxfile11;846
temp13;djaxfile11;833
temp14;djaxfile11;881
temp15;djaxfile11;810
我正在尝试以下方法:-
sed -i -- "s/;892/;`echo $RANDOM % 100 + 800 | bc`/g" file.txt
但它正在用 800 到 900 之间的单个随机数替换所有出现的 892。
输出文件:-
temp11;djaxfile11;821
temp12;djaxfile11;821
temp13;djaxfile11;821
temp14;djaxfile11;821
temp15;djaxfile11;821
您能帮忙更正我的代码吗?提前致谢。
【问题讨论】:
-
您必须绝对在 sed 中执行此操作吗?在 Python 或 PERL 中会很容易。
-
所以你的文件永远不会超过 101 行,对吗?而且这个数字实际上并不是随机的,因为它至少部分是由前面的几行决定的?
-
我的文件实际上有数千条记录。 Wintermute 给出的 sed 建议运行良好,尽管需要一些时间。从性能的角度来看,awk 更快吗?有什么想法吗?