Size: 1952
Comment: POSIX arithmetic instead of bash; also, both examples were WRONG. Rewrite.
|
Size: 395
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): {{{ # 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 }}} |
Hello, im from Gergia. It has been two years of agonising pain and incredible hard work but YOU'VE DONE IT! We are all very proud of you and the way that you have used your terrible accident to help others who have found themselves amputees antique style handheld mirror Perfect site, i like it! http://diamonds83.free-site-host.com/ latest female fashion tre, see you ---- CategoryHomepage |
Hello, im from Gergia. It has been two years of agonising pain and incredible hard work but YOU'VE DONE IT! We are all very proud of you and the way that you have used your terrible accident to help others who have found themselves amputees antique style handheld mirror Perfect site, i like it! http://diamonds83.free-site-host.com/ latest female fashion tre, see you