Differences between revisions 1 and 53 (spanning 52 versions)
Revision 1 as of 2007-05-02 23:05:11
Size: 1833
Editor: redondos
Comment:
Revision 53 as of 2008-11-09 07:47:08
Size: 562
Editor: users-matrix-217-146-246-8
Comment: -9
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
[[Anchor(faq19)]]
== How can I split a file into line ranges, e.g. lines 1-10, 11-20, 21-30? ==
Some Unix systems provide the {{{split}}} utility for this purpose:

{{{
    split --lines 10 --numeric-suffixes input.txt output-
}}}

For more flexibility you can use {{{sed}}}. The {{{sed}}} command can print e.g. the line number range 1-10:
{{{
    sed -n '1,10p'
}}}

This stops {{{sed}}} from printing each line ({{{-n}}}). Instead it only processes the lines in the range 1-10 ("1,10"), and prints them ("p"). {{{sed}}} still reads the input until the end, although we are only interested in lines 1 though 10. We can speed this up by making {{{sed}}} terminate immediately after printing line 10:

{{{
    sed -n -e '1,10p' -e '10q'
}}}

Now the command will quit after reading line 10 ("10q"). The {{{-e}}} arguments indicate a script (instead of a file name). The same can be written a little shorter:

{{{
    sed -n '1,10p;10q'
}}}

We can now use this to print an arbitrary range of a file (specified by line number):

{{{
file=/etc/passwd
range=10
firstline=1
maxlines=$(wc -l < "$file") # count number of lines
while (($firstline < $maxlines))
do
    ((lastline=$firstline+$range+1))
    sed -n -e "$firstline,${lastline}p" -e "${lastline}q" "$file"
    ((firstline=$firstline+$range+1))
done
}}}

This example uses ["BASH"] and KornShell ArithmeticExpressions, which older [wiki:Self:BourneShell Bourne shells] do not have. In that case the following example should be used instead:

{{{
file=/etc/passwd
range=10
firstline=1
maxlines=`wc -l < "$file"` # count line numbers
while [ $firstline -le $maxlines ]
do
    lastline=`expr $firstline + $range + 1`
    sed -n -e "$firstline,${lastline}p" -e "${lastline}q" "$file"
    firstline=`expr $lastline + 1`
done
}}}
Hello my little friends. As a fellow member of the BMMC, I am only too aware of the possibility of the same sad circumstances happening to me jerk squirrel recipes I don't care. So it goes. http://b54.kilu.de/recipe3775.html clone recipe for kraft pineapple bird, http://quartz11.kilu.de/recipe169.html recipe for microwave fudge with white chocolate chips guess, http://fashion5.9ix.net/recipe4891.html chicken roasted green chile sausage reci there, http://samuel1.kilu.de/recipe1861.html recipe tom yum soup, Thank you for your site
----
CategoryHomepage

Hello my little friends. As a fellow member of the BMMC, I am only too aware of the possibility of the same sad circumstances happening to me jerk squirrel recipes I don't care. So it goes. http://b54.kilu.de/recipe3775.html clone recipe for kraft pineapple bird, http://quartz11.kilu.de/recipe169.html recipe for microwave fudge with white chocolate chips guess, http://fashion5.9ix.net/recipe4891.html chicken roasted green chile sausage reci there, http://samuel1.kilu.de/recipe1861.html recipe tom yum soup, Thank you for your site


CategoryHomepage

BashFAQ/019 (last edited 2022-04-19 12:13:19 by emanuele6)