读取文件的特定行

时间:2010-09-22 00:59:09

标签: shell command-line text

读取文件的特定行的最佳方法(更好的性能)是什么?目前,我正在使用以下命令行:

head -line_number file_name | tail -1

ps:优先使用shell工具。

6 个答案:

答案 0 :(得分:7)

您可以使用sed

# print line number 10
$ sed -n '10p' file_name
$ sed '10!d' file_name
$ sed '10q;d' file_name

答案 1 :(得分:5)

#print 10th line
awk NR==10 file_name

答案 2 :(得分:3)

awk -v linenum=10 'NR == linenum {print; exit}' file

答案 3 :(得分:2)

如果您知道这些行的长度相同,那么程序可以直接索引到该行而不读取所有前面的行:od可能会这样做,或者您可以在半打中编写它大多数语言中的行。寻找一个名为seek()或fseek()的函数。

否则,也许......

tail +N | head -n 1

......因为这要求尾部跳到第N行,并且通过管道不必要的线路比你的头到尾解决方案更少。

答案 4 :(得分:0)

ruby -ne '$.==10 and (print; exit)' file

答案 5 :(得分:0)

为了避免文件缓存,我尝试了几次,发现头和尾很快,但是红宝石是最快的:

$ wc -l myfile.txt
920391 myfile.txt

$  time awk NR==334227 myfile.txt
my_searched_line

real    0m14.963s
user    0m1.235s
sys 0m0.126s

$  time head -334227 myfile.txt |tail -1
my_searched_line

real    0m5.524s
user    0m0.569s
sys 0m0.725s

$ time  sed '334227!d' myfile
my_searched_line

real    0m12.565s
user    0m0.814s
sys 0m0.398s

$ time ruby -ne '$.==334227 and (print; exit)' myfile
my_searched_line

real    0m0.750s
user    0m0.568s
sys 0m0.179s