55

What is the best way to output from a file starting from a specific line (big number like 70000). Something like:

cat --line=70000 <file>

5 Answers 5

79

Take a look at tail, more precisecly, it's --lines=+N switch:

tail --lines=+100 <file>
2
  • Wow. I didn't know this even after using this on linux for 8 years ! I always used a bash fn ! Thanks ! getFromLine () { lineno=wc -l $1 | awk '{print $1}' ; lineno=expr $lineno - $2 ; tail -n $lineno $1 ; } Oct 30, 2009 at 8:53
  • 4
    As a note, this does not work on Mountain Lion (Darwin Kernel Version 13.1.0). The variant for Mountain lion is tail -n Apr 8, 2014 at 15:42
25

The most obvious way is tail. The syntax might be slightly different depending on what OS you are using:

tail -n +70000

If you can not get tail to work, you could use sed, but it might end up slower:

sed -pe '1,69999d'
1
  • 1
    tail worked just fine in MinGW (on a 600 MB text file). The runtime was only a few seconds (but the input file could have been in the file cache already). Jun 15, 2016 at 22:17
6

You can use NR parameter with the awk command:

cat <file> | awk '{if (NR>=7000) print}'
1
  • 2
    You can use this command with other limits. As a sample:cat messages | awk '{if (NR>=7000 && NR <7003) print}' shows you row 7000, 7001 and 7002 only. Jun 30, 2017 at 6:26
4

If instead of a line number you need to start listing at the line containing a given $phrase, try the following.

more -1000 +/"$phrase" yourfilename | sed '1,4d'

The -1000 will continuously list text for up to 1000 lines; you can change this as needed. The sed command will chop off the first 4 lines of output, which were automatically inserted by more, containing a blank line, the message "... skipping", and the two lines preceding your intended starting line. I guess this may vary depending on your system.

0

Try this:

tail +250 <file_name>
0

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .