从文件中读取指定范围的行

我有我的文件,其中包含100000线如何我可以从线#5555行到线#7777在Linux下。

感谢所有。

sed '5555,7777!d' <filename> 

这将包含文件的行5555-7777。

丹尼斯发表以下,我同意应该更快:

sed '5555,7777p; 7778q' filename

下面的证据应该是更快的:

 $ n=1 $ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done $ strace -e trace=read -o sed1 sed '5555,7777!d' sedtest2 $ strace -e trace=read -o sed2 sed '5555,7777p; 7778q' sedtest2 $ wc -l sed1 149 sed1 $ wc -l sed2 14 sed1 

只在Bash(为了好玩):

 n=1 while read line; do if [[ ($n -ge 5555) && ($n -le 7777) ]]; then echo $line elif [[ $n -gt 7777 ]]; then break fi n=$(( $n + 1 )) done < file 

当你完成时退出可以加快速度:

 sed -n '5555,7777p; 7778q' input_file 

其中任何一个都可以工作。

  • sed -n'startnumberendnumber p'
  • awk'NR > = startnumber && NR <= endnumber '文件

伟大的问题的方式;)

我发现sed选项不能在mysqldump文件上工作,我猜是由于处理引用的换行符或多字节字符。 头部和尾部使用与我所需要的grep相同的行数进行切片。 要通过$ k获取行$ j,您需要:

 x=$(( $k - $j + 1 )) tail -n +$j filename | head -${x}