好的,所以我充其量是 bash 脚本的新手,但我昨晚深夜编写了这个非常小的脚本,以获取一个相当大的文本文件(约 300,000 行)每行的前 40 个字符并在一个更大的文本文件中搜索匹配(约 220 万行),然后将所有结果输出到匹配行到一个新的文本文件中。
所以脚本看起来像这样:
#!/bin/bash
while read -r line
do
match=${line:0:40}
grep "$match" large_list.txt
done <"small_list.txt"
然后像这样调用脚本
$ bash my_script.sh > outputfile.txt &
这给了我两个列表之间的所有共同元素。现在这一切都很好,并且慢慢起作用。但是我在 m1.smalll ec2 实例上运行它并且足够公平(对此的处理很糟糕,我可以启动一个更大的实例来处理所有这些,或者在我的桌面上执行并上传文件)。但是,我宁愿学习一种更有效的方式来完成相同的任务,但是我似乎不太明白这一点。任何关于如何最好地完成此任务或更有效地完成任务的花絮将非常非常感谢
为了让您了解它的运行速度有多慢,我在大约 10 小时前开始编写脚本,我大约完成了所有比赛的 10%。
此外,我不打算使用 bash,因此其他语言的脚本是公平的游戏。我认为专业人士的 SO 可以轻松地改进我的石头以进行锤击
编辑:添加输入和输出以及有关数据的更多信息
input: (small text file)
8E636C0B21E42A3FC6AA3C412B31E3C61D8DD062|Vice S01E09 HDTV XviD-FUM[ettv]|Video TV|http://bitsnoop.com/vice-s01e09-hdtv-xvid-fum-ettv-q49614889.html|http://torrage.com/torrent/36A02E282D49EB7D94ACB798654829493CA929CB.torrent
3B9403AD73124A84AAE12E83A2DE446149516AC3|Sons of Guns S04E08 HDTV XviD-FUM[ettv]|Video TV|http://bitsnoop.com/sons-of-guns-s04e08-hdtv-xvid-fum-e-q49613491.html|http://torrage.com/torrent/3B9403AD73124A84AAE12E83A2DE446149516AC3.torrent
C4ADF747050D1CF64E9A626CA2563A0B8BD856E7|Save Me S01E06 HDTV XviD-FUM[ettv]|Video TV|http://bitsnoop.com/save-me-s01e06-hdtv-xvid-fum-ettv-q49515711.html|http://torrage.com/torrent/C4ADF747050D1CF64E9A626CA2563A0B8BD856E7.torrent
B71EFF95502E086F4235882F748FB5F2131F11CE|Da Vincis Demons S01E08 HDTV x264-EVOLVE|Video TV|http://bitsnoop.com/da-vincis-demons-s01e08-hdtv-x264-e-q49515709.html|http://torrage.com/torrent/B71EFF95502E086F4235882F748FB5F2131F11CE.torrent
match against (large text file)
86931940E7F7F9C1A9774EA2EA41AE59412F223B|0|0
8E636C0B21E42A3FC6AA3C412B31E3C61D8DD062|4|2|20705|9550|21419
ADFA5DD6F0923AE641F97A96D50D6736F81951B1|0|0
CF2349B5FC486E7E8F48591EC3D5F1B47B4E7567|1|0|429|428|22248
290DF9A8B6EC65EEE4EC4D2B029ACAEF46D40C1F|1|0|523|446|14276
C92DEBB9B290F0BB0AA291114C98D3FF310CF0C3|0|0|21448
Output:
8E636C0B21E42A3FC6AA3C412B31E3C61D8DD062|4|2|20705|9550|21419
附加说明:所以基本上有一个散列,它是输入文件的前 40 个字符(我已经将一个文件的大小减小到原始文件的 15% 左右,所以对于这个文件中的每一行,在较大的文本文件中都有一个散列(我正在匹配的)与一些相应的信息现在它是我想写入新文件的较大文件中的行,因此最后我在较小的文本文件中的所有内容与我的文件的比例为 1:1 output_file.txt 在这种情况下,我显示输入的第一行被匹配(较大文件的第 2 行),然后写入输出文件