或者.. 一口气,我们可以做这样的事情。假设我们有一个包含 500k 行的数据文件。
$>
wc -l data.txt
500001 data.txt
$>
ls -lrtha data.txt
-rw-rw-r--. 1 gaurav gaurav 16M Oct 5 00:25 data.txt
$>
head -2 data.txt ; echo ; tail -2 data.txt
0|This is a test file maybe
1|This is a test file maybe
499999|This is a test file maybe
500000|This is a test file maybe
假设我们的 users.txt 有 3-4 个关键字,在文件“data.txt”中以“ab_”为前缀
$>
cat users.txt
file
maybe
test
所以我们想要读取 users.txt 并且对于每个单词,我们想要将该单词更改为一个新单词。例如,“file”到“ab_file”,“maybe”到“ab_maybe”..
我们可以运行一个while循环,一个一个地读取输入词作为前缀,然后我们对文件运行一个perl命令,输入词存储在一个变量中。在下面的示例中,读取的单词作为 $word 传递给 perl 命令。
我对这个任务进行了计时,这发生得相当快。是在我的 Windows 10 上托管的虚拟机上完成的(使用 Centos7)。
time cat users.txt |while read word; do perl -pi -e "s/${word}/ab_${word}/g" data.txt; done
real 0m1.973s
user 0m1.846s
sys 0m0.127s
$>
head -2 data.txt ; echo ; tail -2 data.txt
0|This is a ab_test ab_file ab_maybe
1|This is a ab_test ab_file ab_maybe
499999|This is a ab_test ab_file ab_maybe
500000|This is a ab_test ab_file ab_maybe
在上面的代码中,我们读到了test,file,maybe这些词,并在data.txt文件中将其改为ab_test,ab_file,ab_maybe。头部和尾部计数确认了我们的操作。
干杯,
高拉夫