一遍又一遍地迭代grep。如何让脚本更快?

时间:2015-05-19 20:39:30

标签: performance shell optimization grep sh

我必须从另一个文件中的一个文件中找到一串数字。 我的代码是这样的:

8901040000001304669F    370040000130466 
8901040000001317380F    370040000131738 
8901040000001330045F    370040000133004 
8901040000001330052F    370040000133005 
8901040000001330060F    370040000133006 

数字字符串位于telephonelist.txt中。该文本文件的格式如下:

981040000030289765F1 655F370D1E86260ED550A2D6F80EFF96 01000045384136453332440303FFFFFFFFFFFFFFFF0000 01000037333643383234380303FFFFFFFFFFFFFFFF0000 083907400030289765 00000031323334FFFFFFFF030334303733323638310AFF 01000034383532FFFFFFFF030334333738333137320AFF 0020 01007F107FD2266C31249530FC531B474F6D44482C007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F107F97AB34277D5378AEC893716281F99ABC007F007F007F007F007F007F007F007F007F007F007F007F007F007F007F107F6608B51E4378BE23072E843D6741A184007F007F007F007F007F007F007F007F007F007F007F007F007F007F 636C8D46973FAE4C1BD181BB4E0D4DA2A5E0455E86406CCF40F309F63470CE07 000003817826FF0187494010083A65626501586519104106 083907400030289765636C8D46973FAE4C1BD181BB4E0D4DA2 080900000000101003636C8D46973FAE4C1BD181BB4E0D4DA2 8901040000038279561 40732681

我正在寻找BC_Tel.inp中由'F'分隔的上述数字的行,其格式如下:

        With Sheets(strName).PivotTables(strPvtName).PivotFields("OrderSubType")
            .ClearAllFilters
            .EnableMultiplePageItems = False

telephonelist.txt和BC_Tel.inp是超过一百万行的大文件。该脚本工作正常,但我想让它更快。我基本上是在txt文件上运行一次,但是我一遍又一遍地在.inp文件上运行。如何更快地完成此过程?

TL;博士 我想优化我的代码,以便它运行得更快。

1 个答案:

答案 0 :(得分:1)

单个grep会执行此操作:

cut -d"F" -f1 telephonelist.txt | grep -F -m1 -f- BC_Tel.inp

grep的-f选项提供包含模式的文件名。在这里,我们使用文件名-来表示" stdin"。