我有一个制表符分隔的文本文件(TXT),其中包含超过 100万行(记录)和 400 MB 文件大小
实施例
demo 123333 new
demo2 3444442 new
demo4 56666632 old
demo5 455552333 new
所以现在我想找出哪些第二个标签等于“56666632”
还将该行隐藏的所有制表符值转换为数组,如:
data[0]=>demo4
data[1]=>56666632
data[2]=>old
注意:我希望没有while和foreach因为txt文件中的行数非常大
我正在使用while循环尝试此代码:
$file = "feed.txt";
$cols = array();
ini_set('auto_detect_line_endings', true);
$fh = fopen($file, 'r');
while (($line = fgetcsv($fh, 1000, "\t")) !== false)
{
if($line[1]=="56666632")
{
var_dump($line);
break;
}
}
答案 0 :(得分:1)
如果你在Linux机器上,可以尝试将作业委托给grep:
$line = shell_exec('grep -P "\t56666632\t" feed.txt');
答案 1 :(得分:0)
如果没有foreach
或while
循环,您将很难做到这一点。事实上,这很难,我甚至不会浪费时间寻找答案
如果您使用的是类似Unix的计算机,请使用grep
:
grep -nE \
'^[^[:space:]]+[[:space:]]+56666632[[:space:]]+[^[:space:]]+' \
feed.txt \
| awk -F: '{print $1}'
正则表达式将搜索包含以下内容的字符串:
使用扩展正则表达式。