Linux 在大型txt文件中搜索并查找位置

Linux 在大型txt文件中搜索并查找位置,linux,ubuntu,sed,find,grep,Linux,Ubuntu,Sed,Find,Grep,我想在linux区的一个大txt文件(187GB)中找到一个位置 txt文件中的每个条目都受到$$$的限制,我想在文件中找到3396条目。所以我需要数一数$$$,然后当它达到3396 我该怎么解决 格里茨 好的,我举个例子 TEXT TEXT TEXT TEXT <TAG>TEXT> <TAG> TEXT TEXT </TEXT> $$$$ 给我行号直到3396计$$$。最后一个是我感兴趣的领域我认为最好使用python(或其他语言) 看看 美元

我想在linux区的一个大txt文件(187GB)中找到一个位置

txt文件中的每个条目都受到$$$的限制,我想在文件中找到3396条目。所以我需要数一数$$$,然后当它达到3396

我该怎么解决

格里茨


好的,我举个例子

TEXT
TEXT

TEXT
TEXT
<TAG>TEXT>

<TAG>
TEXT
TEXT
</TEXT>
$$$$

给我行号直到3396计$$$。最后一个是我感兴趣的领域

我认为最好使用python(或其他语言)

看看


美元符号之间的文字长度是否固定?如果是,您可以使用seek()快速跳转正确的部分。

我认为最好使用python(或其他语言)

看看


美元符号之间的文字长度是否固定?如果是,您可以使用seek()快速跳转正确的部分。

如果没有任何样本数据,很难正确回答,但您可以尝试以下
awk one liner
以查看它是否有效

awk '{for(i=1;i<=NF;i++) {if ($i=="$$$$") count++; if ($i=="$$$$" && count==3396) print $(i+1);}}' INPUT_FILE

awk'{for(i=1;i在没有任何样本数据的情况下,很难正确回答它,但您可以尝试以下
awk one liner
以查看它是否有效

awk '{for(i=1;i<=NF;i++) {if ($i=="$$$$") count++; if ($i=="$$$$" && count==3396) print $(i+1);}}' INPUT_FILE

awk'{for(i=1;i正如前面的海报提到的使用更好的语言来支持笨拙的古老awk一样,这里有一个Perl变体,它也很短。要跳过3395项,并打印第3396项使用

perl -e '$/=q/$$$$/;<>while$.<3395;print$_=<>' <foo.txt

perl-e'$/=q/$$/;而$.正如前面的海报提到的使用更好的语言来支持笨拙的古老awk,这里有一个perl变体,它也很短。要跳过3395项,打印第3396项使用

perl -e '$/=q/$$$$/;<>while$.<3395;print$_=<>' <foo.txt
perl-e'$/=q/$$/;而$.这可能适合您(它是sed的,但对于这样一个大的文件来说会很慢!):

这可能适合您(它是sed,但对于如此大的文件来说速度会慢很多!):


更简单的
awk
命令:

awk '/\$\$\$\$/ { if (++count == 3396) { print; exit } }'
如果要对多个文件执行此操作,可以将
exit
更改为
newfile


假设您要打印包含
$$$$
的第3396行;否则,找到它时要做什么?

一个稍微简单的
awk
命令:

awk '/\$\$\$\$/ { if (++count == 3396) { print; exit } }'
如果要对多个文件执行此操作,可以将
exit
更改为
newfile


假设您要打印包含
$$$$
的第3396行;否则,当您找到它时,您想做什么?

文件的格式是什么?文件中是否有换行符?您感兴趣的条目是否跨越多行?分隔符是否可以出现在任何位置或仅出现在行的开头?f值是多少文件的格式如?文件中是否有换行符?您感兴趣的条目是否跨越多行?分隔符是否可以出现在任何位置或仅出现在行的开头?