我想在linux dist中的大型txt文件(187GB)中找到一个位置。
txt文件中的每个条目都受限于$$$$,我想在文件中找到3396条目。所以我需要计算$$$$,然后当它达到3396时。
我怎么解决?
格尔茨
好的我会举个例子
TEXT
TEXT
TEXT
TEXT
<TAG>TEXT>
<TAG>
TEXT
TEXT
</TEXT>
$$$$
所以我的条目在文件中看起来像。两者之间可能有任何特征。在$$$$之后,换行符中的下一个netry开始。
现在我的问题了。我想检测entri限制器的3396计数的行号
编辑:
我有解决方案:
grep -m 3396 -n '$$$$' FILE
给我一些直到3396个计数的行数。最后一个是我的兴趣点
答案 0 :(得分:1)
如果没有任何样本数据,很难正确回答,但您可以尝试以下awk one-liner
来查看它是否有效。
awk '{for(i=1;i<=NF;i++) {if ($i=="$$$$") count++; if ($i=="$$$$" && count==3396) print $(i+1);}}' INPUT_FILE
答案 1 :(得分:0)
我认为最好使用python(或其他语言)。
查看http://docs.python.org/library/re.html#re.finditer
美元之间的文字是否有固定的长度?如果是,您可以使用seek()快速跳转正确的部分。
答案 2 :(得分:0)
就像早期的海报提到使用更好的语言来支持笨拙古老的awk一样,这里的Perl变体也是 short 。要跳过3395项,并打印第3396项
perl -e '$/=q/$$$$/;<>while$.<3395;print$_=<>' <foo.txt
答案 3 :(得分:0)
这可能对你有用(对于这样一个大文件来说它很慢但是速度慢!):
for x in {1..4000} ; do echo -e '$$$$\n'$x ; done |
sed -n '/$$$$/{x;s/^/x/;ta;:a;s/x/&/3396;tb;x;b;:b;x;p;:c;n;p;/$$$$/!bc;q}'
$$$$
3396
$$$$
答案 4 :(得分:0)
一个更简单的awk
命令:
awk '/\$\$\$\$/ { if (++count == 3396) { print; exit } }'
如果要对多个文件执行此操作,可以将exit
更改为newfile
。
假设您要打印包含$$$$
的第3396行;否则,当你找到它时你想做什么?