Boa*_*oaz 100 linux command-line-interface tail sed
我想每个人都知道有用的 Linux cmd 行实用程序head和tail. head允许您打印文件的前 X 行,tail执行相同的操作但打印文件的末尾。打印文件中间的好命令是什么?类似于middle --start 10000000 --count 20(打印第 10'000'000 行到第 10'000'010 行)。
我正在寻找可以有效处理大文件的东西。我试过了tail -n 10000000 | head 10,它慢得可怕。
Den*_*son 130
sed -n '10000000,10000020p' filename
Run Code Online (Sandbox Code Playgroud)
您可以像这样加快速度:
sed -n '10000000,10000020p; 10000021q' filename
Run Code Online (Sandbox Code Playgroud)
在这些命令中,该选项-n会导致sed“抑制模式空间的自动打印”。该p命令“打印[S]当前模式空间”和q命令“立即退出[S] sed脚本不处理任何更多的输入......”的报价是从sed man页。
顺便说一句,你的命令
tail -n 10000000 filename | head 10
Run Code Online (Sandbox Code Playgroud)
从文件末尾的百万分之一开始,而您的“中间”命令似乎从开头的百万分之一开始,相当于:
head -n 10000010 filename | tail 10
Run Code Online (Sandbox Code Playgroud)
问题在于,对于具有可变长度行的未排序文件,任何进程都必须通过文件计数换行符。没有捷径可走。
但是,如果文件已排序(例如,带有时间戳的日志文件)或具有固定长度的行,则您可以根据字节位置查找文件。在日志文件示例中,您可以像这里的Python 脚本一样对一系列时间进行二分搜索。在固定记录长度文件的情况下,这真的很容易。您只需linelength * linecount在文件中查找字符即可。
* 我一直想发布该脚本的另一个更新。也许这些天我会解决它。
小智 32
我发现了以下用途 sed
sed -n '10000000,+20p' filename
Run Code Online (Sandbox Code Playgroud)
希望它对某人有用!
小智 5
这是我第一次在这里发帖!无论如何,这很容易。假设您想从名为 file.txt 的文件中提取第 8872 行。这是你如何做到的:
cat -n 文件.txt | grep '^ *8872'
现在的问题是在此之后找到 20 行。要做到这一点,你做
cat -n 文件.txt | grep -A 20 '^ *8872'
有关周围或之前的行,请参阅 grep 手册中的 -B 和 -C 标志。
| 归档时间: |
|
| 查看次数: |
283207 次 |
| 最近记录: |