python - 从多个文件中抓取行的最快方法

标签 python unix parallel-processing grep

我的文件大小各异,有些文件很大。我有很多这样的文件,都是用 lzop 压缩的。

文件如下所示:

nodedef>name VARCHAR,family VARCHAR,composite VARCHAR,color VARCHAR
1104283,C,1,'238,32,77' 0,1,4,'255,182,83' 1,1,4,'255,182,83'
7,1,4,'255,182,83' 11,1,4,'255,182,83' 12,1,4,'255,182,83'
13,1,4,'255,182,83' 14,1,4,'255,182,83'

我想抓取第二列中有 C 的所有行 - 带有“,C”的 grep 可以做到这一点。我怎样才能加快速度?

我正在寻找的行将始终位于文件的顶部 - 但行数可能会有所不同(不应超过 20 行)。该文件是有序的,因此只要带有“,C”的行后面的行与正则表达式不匹配,文件中就不再有“,C”。

我应该在这里考虑并行化 grep (我可以访问具有多个内核的 HPC)吗?

谢谢,

编辑: 同一文件中可以有多个匹配项(并且包含“C”的行将始终聚集在文件顶部)

最佳答案

grep 在搜索特定列中的文本时可能效果不佳,但 awk 在实现这一目标方面表现出色。

如果您要处理多个文件,并且不能有超过一行包含 2nd 列值为 C 的行,则以下脚本将是足够了。

# Am assuming the the `.txt` files are the ones you want to process

for i in *.txt; do
    [ -e "$i" ] || continue    # To handle when no input *.txt files present
    awk -F',' '$2 ~ /C/ { print }' "$i" >> MatchingLines.txt
done

正在创建一个新文件 MatchingLines.txt,其内容将附加到您拥有的每个文件中包含 C 的行。即使文件包含多个实例,它们也会全部附加到输出文件中。

关于python - 从多个文件中抓取行的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37835059/

相关文章:

python - 如何更改登录 Twitter 用户的 Django Social 身份验证密码

python - 将字符串转换为日期时间 - python 数据框

linux - 帮助我从 ABS 指南中理解 bash 中的这个简单的 io 重定向

r - 并行处理和临时文件

python - PyPy:获取对字符串的原始访问

python - Python中模块化算术计算错误

c - 获取有关信号处理的信息

python - 每隔 x 小时运行一个进程

c++ - 通过 OpenMPI 进行非阻塞数据共享

arrays - 在 Go 中并行处理数组会产生意想不到的结果