[ale] Move last line of a file to first line
Ed Cashin
ecashin at noserose.net
Wed Mar 28 21:57:09 EDT 2012
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/dswaters and
> 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/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.ale.org/pipermail/ale/attachments/20120328/49331a07/attachment-0001.html
More information about the Ale
mailing list