Answers:
sed -n '10000000,10000020p' filename
您也许可以像这样加快速度:
sed -n '10000000,10000020p; 10000021q' filename
在这些命令中,该选项-n
导致sed
“禁止自动打印图案空间”。该p
命令“打印[S]当前模式空间”和q
命令“立即退出[S] sed脚本不处理任何更多的输入......”的报价是从sed
man
页。
顺便说一句,您的命令
tail -n 10000000 filename | head 10
从文件末尾的第1 百万行开始,而您的“ middle”命令似乎从文件的第1百万分之一开始,这等效于:
head -n 10000010 filename | tail 10
问题在于,对于具有可变长度行的未排序文件,任何过程都将必须对文件进行换行计数。没有捷径可循。
但是,如果文件已排序(例如,带有时间戳的日志文件)或具有固定长度的行,则可以基于字节位置查找文件。在日志文件示例中,您可以像我的Python脚本*那样在一定范围内进行二进制搜索。对于固定记录长度的文件,这确实很容易。您只需要linelength * linecount
在文件中查找字符。
*我一直想发布该脚本的另一个更新。也许这几天我会解决它。
sed
Charles middle
函数的一个版本:middle() { local s=$1 c=$2; shift 2; sed -n "$s,$(($s + $c -1))p; $(($s + $c))q" "$@"; }
。它将处理多个文件参数,带空格的文件名等。多个文件将像正常处理一样被处理在一起sed
(因此,中间的1000 100 file1 file2会跨越第一个文件的末尾到开头(如果第一个少于1100行)。
middle startline count filename
或多个文件名:middle startline count file1 file2 file3
或重定向:middle startline count < filename
或在管道中:some_command |
中间起始行计数`或cat file* | middle startline count
我发现了以下用途 sed
sed -n '10000000,+20p' filename
希望对某人有用!
sed -n
参数,使它相当易读。
extract_lines(){sed -n "$1,+$2p" <file>}
写入标准输出。
这是我第一次在这里发布!无论如何,这很容易。假设您要从名为file.txt的文件中提取第8872行。这是您的操作方式:
cat -n file.txt | grep'^ * 8872'
现在的问题是在此之后找到20行。为此,您要做
cat -n file.txt | grep -A 20'^ * 8872'
有关周围或之前的行,请参见grep手册中的-B和-C标志。
cat -n file.txt | grep '^ *1'
产生所有右边有1的行。如何用这种技术输出第1行?我知道我可以-n 1 ....但是如何使用grep?
使用以下命令获取特定范围的行
awk 'NR < 1220974{next}1;NR==1513793{exit}' debug.log | tee -a test.log
在这里debug.log是我的文件,其中缺少行,并且我以前将行号从1220974到1513793的行打印到文件test.log。希望对捕获线段范围有所帮助。
例如,此awk将打印20到40之间的行
awk'{if(((NR> 20)&&(NR <40))打印$ 0}'/ etc / passwd