【发布时间】:2014-08-30 09:47:15
【问题描述】:
我在 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 分钟。
有人知道更好/更快的方法吗?提前谢谢你。
【问题讨论】:
-
试试:
LC_ALL=C fgrep -f ./my/patterns.txt ./my/file.txt | $decoder > ./path/to/result.txt