Differences between revisions 138 and 139
Revision 138 as of 2009-01-10 19:09:08
Size: 1735
Editor: pgas
Comment: spam
Revision 139 as of 2009-01-10 22:41:06
Size: 242
Editor: nat-88-212-6-40
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 -e '1,10p' -e '10q'
}}}

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"). The command will quit after reading line 10 ("10q").

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

{{{
# POSIX shell
file=/etc/passwd
range=10
cur=1
last=$(wc -l < "$file") # count number of lines
chunk=1
while [ $cur -lt $last ]
do
    endofchunk=$(($cur + $range - 1))
    sed -n -e "$cur,${endofchunk}p" -e "${endofchunk}q" "$file" > chunk.$(printf %04d $chunk)
    chunk=$(($chunk + 1))
    cur=$(($cur + $range))
done
}}}

The previous example uses POSIX [[ArithmeticExpression|arithmetic]], which older [[BourneShell|Bourne shells]] do not have. In that case the following example should be used instead:

{{{
# legacy Bourne shell; assume no printf either
file=/etc/passwd
range=10
cur=1
last=`wc -l < "$file"` # count number of lines
chunk=1
while test $cur -lt $last
do
    endofchunk=`expr $cur + $range - 1`
    sed -n -e "$cur,${endofchunk}p" -e "${endofchunk}q" "$file" > chunk.$chunk
    chunk=`expr $chunk + 1`
    cur=`expr $cur + $range`
done
}}}

Awk can also be used to produce a more or less equivalent result:

{{{
 awk -v range=10 '{print > FILENAME "." (int((NR -1)/ range)+1)}' file
}}}
Wery well! Steve and Jackie, Two people who have the strength, bravery and resolve to make me feel very proud and really rather humble to know them salad Very cool! http://dessertgd.interfree.it/recipeac0.html cocktail, Please More updates

Wery well! Steve and Jackie, Two people who have the strength, bravery and resolve to make me feel very proud and really rather humble to know them salad Very cool! http://dessertgd.interfree.it/recipeac0.html cocktail, Please More updates

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