我的文件大小各异,有些文件很大。我有很多这样的文件,都是用 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/