在Linux中,在文件的另100万条记录中grep 1000条记录列表的最快方法是什么。
假设这些是我的示例记录:
1,,EE1,1000,WAT,EEE,20160222T02:00:15+0400,20181231T23:59:59+0400,,vEEE,,47126469f184fee9a80664d952d7fea7,50278774602,95223904,140495221530736,21001,,,,,,,,,,,,,,,C
0,,EE1,1000,WAT,EEE,20160222T02:00:15+0400,20181231T23:59:59+0400,20160222T02:00:15+0400,,vEEE,47126469f184fee9a80664d952d7fea7,50278774602,,,21001,,,,,,,,,,,,,,,H
1,,EE1,1000,WAT,EEE,20160222T02:00:15+0400,20181231T23:59:59+0400,20160521T11:07:25+0400,,vEEE,47126469f184fee9a80664d952d7fea7,50278774602,0095223904,140495221530736,21001,,,,,,,,,,,,,,,H
如果我grep 50278774602
,则这些值将出现在三行中。我已经在同一脚本上使用for循环开发了一个脚本。我在文件中有此类数字的列表,并且正在大文件(数百万行)中搜索值,并且我只需要最后一次出现包含我的grep模式的此类行。它与for
循环完美配合,但我担心的是,这需要花费大量时间。
我的剧本:
for i in `cat /home/admin/pnd_tmp`; do
grep $i /test/done/TEST_RT* | tail -1 > /home/admin/pnd_fin |
awk -F "," '{if ( $1 == "4" ) print $13 }' > /home/admin/pnd_tmp_fin
done
谁能建议一个更好的方法来做到这一点?
参考方案
如果您有tac和grep(GNU),则可以使用
tac /test/done/TEST_RT* | grep -m 1 $i
在您的for循环中。这比查找所有匹配项并仅选择最后一个匹配项要快得多。
Python sqlite3数据库已锁定 - python我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…
Shell脚本如何从自身内部执行另一个Shell脚本 - python我的问题是,shell脚本如何执行在新进程中生成的另一个shell脚本?还是在与调用它的脚本相同的过程中执行?一个示例是一个Python脚本,该脚本在满足条件后从Shell脚本执行,还有人如何编写此Shell脚本,使其生成Python脚本,然后退出自身而不会杀死Python脚本 python大神给出的解决方案 是的,如果您在外壳程序中调用外壳程序脚本,外壳程…
在当前目录下编写一个脚本,生成多个目录,创建空文件,然后列出所有文件。 - pythonClosed. This question needs details or clarity。它当前不接受答案。 …
如何在Python中使用文本文件作为输入? - python这似乎是一个简单的问题,但这是我第一次接触Python,所以请多多包涵。我创建了一个简单的bash脚本来进行一些SMTP枚举,并一直试图将其转换为Python脚本。 bash脚本是:到目前为止,我拥有的Python脚本是这样的:但是现在,我必须分别输入每个用户名一次,脚本关闭。我已经创建了一个简单的文本文件,其中包含许多可能的用户名,并且希望能够使用该文件中…
Python pytz时区函数返回的时区为9分钟 - python由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…