我正在尝试使用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脚本执行此操作。它可以正常工作,但速度太慢。
方法1:
有没有快速处理这个大文件的方法?
更新:2018年2月9日
如果电话号码不在指定位置(第10-20列),使用AWK和Perl提供的解决方案效果很好。如果我尝试进行全局替换,处理时间太长了。有没有更好的方法来实现这一点?
students.txt: 更新版本
10000000019234567890XXX...9234567890 10000000029325788532YYY... . . . 10010000008766443367ZZZZ9234567890...
场景: 我在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脚本执行此操作。它可以正常工作,但速度太慢。
方法1:
while read -r pattern replacement; do
sed -i "s/$pattern/$replacement/" students.txt
done < encrypted_contact_numbers.txt
方法二:
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...
{}
格式工具将其格式化为code/data/output/errorMsgs
,以正确格式化内容。有关更多信息,请参见editing-help和formatting。祝你好运。 - shellter