Fastest way to print a single line in a file

前端 未结 5 803
礼貌的吻别
礼貌的吻别 2021-02-02 12:44

I have to fetch one specific line out of a big file (1500000 lines), multiple times in a loop over multiple files, I was asking my self what would be the best option

5条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-02-02 13:34

    If you want to print only 1 line (say the 20th one) from a large file you could also do:

    head -20 filename | tail -1
    

    I did a "basic" test with bash and it seems to perform better than the sed -n '1{p;q} solution above.

    Test takes a large file and prints a line from somewhere in the middle (at line 10000000), repeats 100 times, each time selecting the next line. So it selects line 10000000,10000001,10000002, ... and so on till 10000099

    $wc -l english
    36374448 english
    
    $time for i in {0..99}; do j=$((i+10000000));  sed -n $j'{p;q}' english >/dev/null; done;
    
    real    1m27.207s
    user    1m20.712s
    sys     0m6.284s
    

    vs.

    $time for i in {0..99}; do j=$((i+10000000));  head -$j english | tail -1 >/dev/null; done;
    
    real    1m3.796s
    user    0m59.356s
    sys     0m32.376s
    

    For printing a line out of multiple files

    $wc -l english*
      36374448 english
      17797377 english.1024MB
       3461885 english.200MB
      57633710 total
    
    $time for i in english*; do sed -n '10000000{p;q}' $i >/dev/null; done; 
    
    real    0m2.059s
    user    0m1.904s
    sys     0m0.144s
    
    
    
    $time for i in english*; do head -10000000 $i | tail -1 >/dev/null; done;
    
    real    0m1.535s
    user    0m1.420s
    sys     0m0.788s
    

提交回复
热议问题