读取文件的特定行的最佳方法(更好的性能)是什么?目前,我正在使用以下命令行:
head -line_number file_name | tail -1
ps:优先使用shell工具。
答案 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