gpt4 book ai didi

python - 用于替换多个文本的 SED 或 AWK 脚本

转载 作者:太空狗 更新时间:2023-10-30 00:42:43 31 4
gpt4 key购买 nike

我正在尝试使用 sed 脚本执行以下操作,但它花费了太多时间。看起来我做错了什么。

场景:我在 students.txt 中有学生记录(> 100 万条)。在这个文件中(每行)第一个10个字符是学生ID,接下来的10个字符是联系电话等

students.txt

10000000019234567890XXX...
10000000029325788532YYY...
.
.
.
10010000008766443367ZZZZ...

我有另一个文件 (encrypted_contact_numbers.txt),其中包含所有电话号码和相应的加密电话号码,如下所示

encrypted_contact_numbers.txt

Phone_Number, Encrypted_Phone_Number

9234567890, 1122334455
9325788532, 4466742178
.
.
.
8766443367, 2964267747

我想用 encrypted_contact_numbers.txt 中相应的加密电话号码替换 students.txt 中的所有联系电话(第 11-20 位)。

预期输出:

10000000011122334455XXX...
10000000024466742178YYY...
.
.
.
10010000002964267747ZZZZ...

我正在使用下面的 sed 脚本来执行此操作。它运行良好,但速度太慢。

方法一:

while read -r pattern replacement; do   
sed -i "s/$pattern/$replacement/" students.txt
done < encrypted_contact_numbers.txt

方法 2:

sed 's| *\([^ ]*\) *\([^ ]*\).*|s/\1/\2/g|' <encrypted_contact_numbers.txt |
sed -f- students.txt > outfile.txt

有什么办法可以快速处理这么大的文件吗?

更新:2018 年 2 月 9 日

如果电话号码位于指定位置(第 10-20 列),AWK 和 Perl 中给出的解决方案工作正常,如果我尝试进行全局替换,则处理时间太长。有什么最好的方法可以实现这一目标吗?

students.txt : 更新版本

10000000019234567890XXX...9234567890
10000000029325788532YYY...
.
.
.
10010000008766443367ZZZZ9234567890...

最佳答案

awk 助您一臂之力!

如果你有足够的内存来保存phone_map文件在内存中

awk -F', *' 'NR==FNR{a[$1]=$2; next}
{key=substr($0,11,20)}
key in a {$0=substr($0,1,10) a[key] substr($0,21)}1' phone_map data_file

未测试,因为您缺少数据文件。它应该会加快速度,因为这两个文件只会被扫描一次。

关于python - 用于替换多个文本的 SED 或 AWK 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48408608/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com