如何用另一个文件中的字符串随机替换一个文本文件中的特定字符串?例如:
file1.txt(file has more than 200 lines):
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
file2.txt(file has 10-20 lines):
@adress1.com
@adress2.com
@adress3.com
@adress4.com
@adress5.com
output.txt:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
你可以实现这个算法:
file2.txt
到数组中file1.txt
:像这样:
(特别感谢@GlennJackman 和@dessert 的改进。)
如果您真的想要随机选择,那么这是一种使用方法
awk
:OTOH,如果您想要地址的随机排列,我建议您使用类似
您可以使用
shuf
(您可能需要sudo apt install shuf
)来打乱第二个文件的行,然后使用它们来替换:shuf
只是随机化其输入行的顺序。那里的awk
命令将首先读取 file1 的所有内容(NR==FNR
仅在读取第一个文件时为真),并将第二个字段(字段由 定义@
,因此这是域)保存在关联数组中a
,其值为域和其键是行号。然后,当我们进入下一个文件时,它将简单地打印a
为该行号存储的任何内容,以及文件 2 中相同行号的内容。请注意,这假设两个文件具有完全相同的行数,并且实际上并不是“随机的”,因为它不允许重复任何内容。但这看起来像你想要的。
Python 2.7 和 3 解决方案
此解决方案将输入文件每一行中第一次出现的单个任意给定字符串(“needle”)替换为每次从替换字符串列表的行集中随机选择的字符串。
将指针锚定到字符串的开头或结尾或完全使用正则表达式应该几乎是微不足道的。
用法
例子:
或者
这是一种perl方式:
另一个 bash 解决方案。它使用 bash 内置的字符串替换功能。它还假设
file2.txt
仅包含替换字符串。如果不是,他们可以首先使用过滤grep -o <replace> file2.txt
和
shuf
没有
shuf
(几乎纯bash
)在这里,我们必须首先创建一个
shuf
像这样模仿的函数然后是类似的
测试: