按字段数过滤行

XNor

我正在Linux中过滤很长的文本文件(通常> 1GB),以便仅获取我感兴趣的那些行。我使用此命令:

cat ./my/file.txt | LC_ALL=C fgrep -f ./my/patterns.txt | $decoder > ./path/to/result.txt

$decoder是我用来解码这些文件的程序的路径。现在的问题是它只接受带有7个字段的行,也就是7个用空格分隔的字符串(例如“ 11 22 33 44 55 66 77”)。每当将包含更多或更少字段的字符串传递到该程序中时,它就会崩溃,并且我收到一条损坏的管道错误消息。

为了解决这个问题,我在中编写了一个超级简单的脚本Bash

while read line ; do
    if [[ $( echo $line | awk '{ print NF }') == 7 ]]; then
        echo $line;
    fi;
done

但是问题在于,现在要花很多时间才能完成。在此之前需要花费几秒钟,而现在大约需要30分钟。

有人知道更好/更快的方法吗?先感谢您。

控制台盒

好吧,也许您可​​以在awk两者之间插入无需依赖Bash:

LC_ALL=C fgrep -f ./my/patterns.txt ./my/file.txt | awk 'NF == 7' | "$decoder" > ./path/to/result.txt

也许awk可以成为首发。这种方式可能会更好:

awk 'NF == 7' ./my/file.txt | LC_ALL=C fgrep -f ./my/patterns.txt | "$decoder" > ./path/to/result.txt

您可以合并fgrepawk作为单个awk命令,但是我不确定这是否会影响任何需要的内容LC_ALL=C并提供更好的性能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何按具有给定值的字段数过滤制表符分隔的输入?

来自分类Dev

ElasticSearch按嵌套文档总数过滤

来自分类Dev

按计数过滤sphinxql组

来自分类Dev

按SQLAlchemy中的孙子计数过滤

来自分类Dev

按整数过滤领域结果

来自分类Dev

按出现次数过滤 SQL 列

来自分类Dev

Laravel 按相关模型数过滤模型

来自分类Dev

使用 Ngrams 按分数过滤

来自分类Dev

使用dplyr按出现的字符串的最高出现次数过滤分组的行

来自分类Dev

如何过滤地图字段数组

来自分类Dev

Scala按未知字段数排序

来自分类Dev

按嵌套字段过滤

来自分类Dev

从分组行中获取字段数

来自分类Dev

Elastic Search按嵌套文档计数过滤

来自分类常见问题

ElasticSearch:在聚合期间按不重复计数过滤

来自分类Dev

SimplePie:按项目值和项目数过滤

来自分类Dev

按学生的最高分数过滤

来自分类Dev

将Observables分组,然后按计数过滤

来自分类Dev

按关系中的项目数过滤结果

来自分类Dev

按日期或匿名函数过滤熊猫系列

来自分类Dev

熊猫:按发生次数过滤分组的系列

来自分类Dev

ElasticSearch:在聚合期间按不重复计数过滤

来自分类Dev

SqlAlchemy查询和按关系数过滤

来自分类Dev

按 SSRS 中的多值参数过滤

来自分类Dev

连接具有不同字段数的行中的字段

来自分类Dev

根据先前的行值按行分段数据

来自分类Dev

按模型字段过滤,Django

来自分类Dev

按嵌套的 populate() 字段过滤

来自分类Dev

根据行NA计数过滤data.frame