[ale] Move last line of a file to first line

Ed Cashin ecashin at noserose.net
Thu Mar 29 08:52:01 EDT 2012


Cool.  I really have to get with the program and put some stuff on github.

On Thu, Mar 29, 2012 at 12:29 AM, Richard Bronosky <Richard at bronosky.com>wrote:

> Sadly, I only know "of" ed. But, thanks to you, Ed, I'm now interested
> in using ed in my daily workflow. I like this particular use case.
> I've added it to my gist.
> https://gist.github.com/2228256#file_flop2.sh (I <3 heredoc syntax)
>
> On Wed, Mar 28, 2012 at 9:57 PM, Ed Cashin <ecashin at noserose.net> wrote:
> > Thanks for mentioning the non-stream editor!  They made sed for streams,
> > because ed is for files.  It is at times like this when I sincerely
> regret
> > the way distros are beginning to omit ed for the first time in decades.
> >
> > There's an ed move command called "m".  Move this line to that line.  The
> > one liner below does the same thing as this interactive session
> >
> > $m0
> > w
> > q
> >
> > ecashin at reynolds:~$ head /etc/passwd | nl > ~/tmp/a
> > ecashin at reynolds:~$ cp ~/tmp/a ~/tmp/b
> > ecashin at reynolds:~$ printf '$m0\nw\nq\n' | ed ~/tmp/b
> > 414
> > 414
> > ecashin at reynolds:~$ diff -u ~/tmp/a ~/tmp/b
> > --- /home/ecashin/tmp/a 2012-03-28 21:40:25.000000000 -0400
> > +++ /home/ecashin/tmp/b 2012-03-28 21:41:44.000000000 -0400
> > @@ -1,3 +1,4 @@
> > +    10 news:x:9:9:news:/var/spool/news:/bin/sh
> >       1 root:x:0:0:root:/root:/bin/bash
> >       2 daemon:x:1:1:daemon:/usr/sbin:/bin/sh
> >       3 bin:x:2:2:bin:/bin:/bin/sh
> > @@ -7,4 +8,3 @@
> >       7 man:x:6:12:man:/var/cache/man:/bin/sh
> >       8 lp:x:7:7:lp:/var/spool/lpd:/bin/sh
> >       9 mail:x:8:8:mail:/var/mail:/bin/sh
> > -    10 news:x:9:9:news:/var/spool/news:/bin/sh
> > ecashin at reynolds:~$
> >
> > On Wed, Mar 28, 2012 at 12:41 PM, Richard Bronosky <Richard at bronosky.com
> >
> > wrote:
> >>
> >> Be careful doing this with large files. You are storing the whole file
> >> in memory.
> >>
> >> I would do this in 2 passes.
> >>
> >> # First get the last line into a new file. (assuming the file in
> >> question is passed in as the first argument)
> >> tail -n1 $1 > $1.mod
> >> # Second add the rest of the file, less the last line.
> >> sed '$d' $1 >> $1.mod
> >>
> >> This is working with streams. It requires an additional $filesize of
> >> disk space, but it does not require $filesize of RAM.
> >>
> >> If you want to be really efficient, use ed. ;-)
> >> # This will trim the last line of the file in place, but I'm not
> >> taking the time to figure out how to add it to the beginning.
> >> ed "$1" << EOF
> >> $
> >> d
> >> w
> >> EOF
> >>
> >> On Mar 28, 2012 11:19 AM, "Lightner, Jeff" <JLightner at water.com> wrote:
> >> >
> >> > I found this works:
> >> >
> >> > awk '{a[NR]=$0} END {print a[NR]; for (i=1;i<NR;i++) print a[i]}'
> >> > originalfile >newfile
> >> >
> >> >
> >> >
> >> > Where you replace originalfile and newfile with real file names.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > ________________________________
> >> >
> >> > From: ale-bounces at ale.org [mailto:ale-bounces at ale.org] On Behalf Of
> >> > Lightner, Jeff
> >> > Sent: Wednesday, March 28, 2012 11:10 AM
> >> > To: Atlanta Linux Enthusiasts
> >> > Subject: [ale] Move last line of a file to first line
> >> >
> >> >
> >> >
> >> > We have variable length text files being received in which the
> “header”
> >> > line we use in automated processing is the last line of the file
> rather than
> >> > the first line.
> >> >
> >> >
> >> >
> >> > What is the best way to move that last line of a text file to be the
> >> > first line?
> >> >
> >> >
> >> >
> >> > Please answer the question as asked and don’t suggest making the file
> be
> >> > in the correct order when we receive it or changing the automated
> processing
> >> > to read the last line first.  Assume those aren’t options.
> >> >
> >> >
> >> >
> >> > What I came up with was to do tail -1 >newfile and head -<number of
> >> > lines – 1> but was thinking there ought to be a better way.
> >> >
> >> >
> >> >
> >> > I see sed can deal with last line, first line and insertion but the
> >> > examples I’m finding address either/or not moving last line to first
> line.
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > Athena®, Created for the Cause™
> >> >
> >> > Making a Difference in the Fight Against Breast Cancer
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > How and Why I Should Support Bottled Water!
> >> > Do not relinquish your right to choose bottled water as a healthy
> >> > alternative to beverages that contain sugar, calories, etc. Your
> support of
> >> > bottled water will make a difference! Your signatures count! Go to
> >> > http://www.bottledwatermatters.org/luv-bottledwater-iframe/dswatersand sign
> >> > a petition to support your right to always choose bottled water. Help
> fight
> >> > federal and state issues, such as bottle deposits (or taxes) and
> >> > organizations that want to ban the sale of bottled water. Support
> community
> >> > curbside recycling programs. Support bottled water as a healthy way to
> >> > maintain proper hydration. Our goal is 50,000 signatures. Share this
> >> > petition with your friends and family today!
> >> >
> >> >
> >> >
> >> > ---------------------------------
> >> > CONFIDENTIALITY NOTICE: This e-mail may contain privileged or
> >> > confidential information and is for the sole use of the intended
> >> > recipient(s). If you are not the intended recipient, any disclosure,
> >> > copying, distribution, or use of the contents of this information is
> >> > prohibited and may be unlawful. If you have received this electronic
> >> > transmission in error, please reply immediately to the sender that
> you have
> >> > received the message in error, and delete it. Thank you.
> >> > ----------------------------------
> >> >
> >> >
> >> >
> >> >
> >> > _______________________________________________
> >> > Ale mailing list
> >> > Ale at ale.org
> >> > http://mail.ale.org/mailman/listinfo/ale
> >> > See JOBS, ANNOUNCE and SCHOOLS lists at
> >> > http://mail.ale.org/mailman/listinfo
> >> >
> >>
> >> _______________________________________________
> >> Ale mailing list
> >> Ale at ale.org
> >> http://mail.ale.org/mailman/listinfo/ale
> >> See JOBS, ANNOUNCE and SCHOOLS lists at
> >> http://mail.ale.org/mailman/listinfo
> >
> >
> >
> >
> > --
> >   Ed Cashin <ecashin at noserose.net>
> >   http://noserose.net/e/
> >   http://www.coraid.com/
> >
> > _______________________________________________
> > Ale mailing list
> > Ale at ale.org
> > http://mail.ale.org/mailman/listinfo/ale
> > See JOBS, ANNOUNCE and SCHOOLS lists at
> > http://mail.ale.org/mailman/listinfo
> >
>
>
>
> --
> .!# RichardBronosky #!.
>
> _______________________________________________
> Ale mailing list
> Ale at ale.org
> http://mail.ale.org/mailman/listinfo/ale
> See JOBS, ANNOUNCE and SCHOOLS lists at
> http://mail.ale.org/mailman/listinfo
>



-- 
  Ed Cashin <ecashin at noserose.net>
  http://noserose.net/e/
  http://www.coraid.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.ale.org/pipermail/ale/attachments/20120329/0b96a679/attachment-0001.html 


More information about the Ale mailing list