Script to move the first line of a file to the end


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script to move the first line of a file to the end
# 1  
Old 12-26-2008
Script to move the first line of a file to the end

I'm rather new to scripting, and despite my attempts at finding/writing a script to do what I need, I have not yet been successful.

I have a file named "list.txt" of arbitrary length with contents in the following format:
Code:
/home/user/Music/file1.mp3
/home/user/Music/file2.mp3
/home/user/Music/file3.mp3
/home/user/Music/file5.txt
/home/user/Music/file7.wav
/home/user/Music/file11.ogg
/home/user/Music/file13.m4a

I would like a script that will change the contents of "list.txt" to:
Code:
/home/user/Music/file2.mp3
/home/user/Music/file3.mp3
/home/user/Music/file5.txt
/home/user/Music/file7.wav
/home/user/Music/file11.ogg
/home/user/Music/file13.m4a
/home/user/Music/file1.mp3

Basically, I need the first line moved to the end. I don't care whether it's in bash, awk, sed, perl, or whatever scripting language as long as it works.
# 2  
Old 12-26-2008
What is your attempt - you should show that first ?

Here is a sample

Code:
awk '{ if ( NR == 1 ) { store=$0 } else { print } }END{ print store }' filename

# 3  
Old 12-26-2008
using Perl:
Code:
# first_to_last.pl
my $file = shift;
open(FH, '<', $file)  or  die "Failed to read file $file : $! \n";
my $first_line      = <FH>;
my @remaining_lines = <FH>;
close(FH);

open(FH, '>', $file)  or  die "Failed to write file $file : $! \n";
print FH @remaining_lines;
print FH $first_line;
close(FH);

run this script as:
Code:
perl first_to_last.pl list.txt

# 4  
Old 12-26-2008
Why do you want to load the entire file into memory ( almost entire except for the first line ). Won't that be enough to store the first line and print the rest as and when its being read?
# 5  
Old 12-26-2008
Code:
awk 'NR==1{store=$0;next}1;END{print store}' file

# 6  
Old 12-26-2008
Quote:
Originally Posted by Yogesh Sawant
using Perl:
Code:
# first_to_last.pl
my $file = shift;
open(FH, '<', $file)  or  die "Failed to read file $file : $! \n";
my $first_line      = <FH>;
my @remaining_lines = <FH>;
close(FH);

open(FH, '>', $file)  or  die "Failed to write file $file : $! \n";
print FH @remaining_lines;
print FH $first_line;
close(FH);

run this script as:
Code:
perl first_to_last.pl list.txt

Thanks. That works exactly as I need it to.



Quote:
Originally Posted by danmero
Code:
awk 'NR==1{store=$0;next}1;END{print store}' file

That does what I need it to, but it outputs the results to the console, whereas I need it to output it back to the file. I tried setting it equal to a variable and outputting that to a file, but that output the contents of the file separated by spaces rather than line breaks.

Here's what I tried:
Code:
#!/bin/bash
var=`awk 'NR==1{store=$0;next}1;END{print store}' list.txt`
echo $var > list.txt

Code:
$ cat ./list.txt
1
2
3
4
5
6
$ ./first_to_last.sh
$ cat ./list.txt
2 3 4 5 6 1

# 7  
Old 12-27-2008
Quote:
Originally Posted by Altay_H
Basically, I need the first line moved to the end. I don't care whether it's in bash, awk, sed, perl, or whatever scripting language as long as it works.

Code:
{
  IFS= read -r line
  cat
  printf "%s\n" "$line"
} < "$FILE" > tempfile && mv tempfile "$FILE"

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Printing string from last field of the nth line of file to start (or end) of each line (awk I think)

My file (the output of an experiment) starts off looking like this, _____________________________________________________________ Subjects incorporated to date: 001 Data file started on machine PKSHS260-05CP ********************************************************************** Subject 1,... (9 Replies)
Discussion started by: samonl
9 Replies

2. Shell Programming and Scripting

With script bash, read file line per line starting at the end

Hello, I'm works on Ubuntu server My goal : I would like to read file line per line, but i want to started at the end of file. Currently, I use instructions : while read line; do COMMAND done < /var/log/apache2/access.log But, the first line, i don't want this. The file is long... (5 Replies)
Discussion started by: Fuziion
5 Replies

3. Shell Programming and Scripting

Cannot execute/finish script because of last line syntax error: unexpected end of file/token `done'

first of all I thought the argument DONE is necessary for all scripts that have or begin with do statements which I have on my script, However, I still don't completely understand why I am receiving an error I tried adding another done argument statement but didn't do any good. I appreciate... (3 Replies)
Discussion started by: wolf@=NK
3 Replies

4. Shell Programming and Scripting

sed: how to move matched pattern to end of previous line

Hello, I'm new to this forum. I've been doing a lot of sed work lately and have found many useful tips on this forum. I've hit a roadblock in a project, though, and could really use some help. I have a text file with many lines like the following, i.e., some lines begin with a single word... (3 Replies)
Discussion started by: paroikoi
3 Replies

5. Shell Programming and Scripting

how to move a word to the end of file

Hey guys, I want move a specific word from the middle of the text and move it the end of the file, which means I want the word to be deleted from it's line and moved to the end of file. I know how to use sed for adding a word the end of file, but I don't know how to move words. tnx (2 Replies)
Discussion started by: Johanni
2 Replies

6. Shell Programming and Scripting

help needed with shell script to append to the end of a specific line in a file on multiple servers

Hi Folks, I was given a task to append three IP's at the end of a specific (and unique) line within a file on multiple servers. I was not able to do that with the help of a script. All I could was: for i in server1 server2 server3 server4 do ssh $i done I know 'sed' could be used to... (5 Replies)
Discussion started by: momin
5 Replies

7. Shell Programming and Scripting

awk script to move a line after the matched pattern line

I have the following text format in a file which lists the question first and then 5 choices after that the explanantion and finally the answer. 1.The amount of time it takes for most of a worker’s occupational knowledge and skills to become obsolete has been declining because of the... (2 Replies)
Discussion started by: nanchil_guy
2 Replies

8. Shell Programming and Scripting

Move a line to end of file

Can somebody help me with a script .... Read a file /etc/inittab find the string starting with rcml and move it entirely towards the end of file. rcml:2:once:/usr/sni/aix52/rc.ml > /dev/console 2>&1 I basically want to change the startup sequence. (2 Replies)
Discussion started by: imanuk2007
2 Replies

9. Shell Programming and Scripting

script to move two lines to the end of a file

My input file is multiline file and I am writing a script to search for a pattern and move the line with the pattern and the next line to the end of the file. Since I am trying to learn awk, I thought I would try it. My input looks like the following: D #testpoint 1 510.0 D #testpoint2 ... (5 Replies)
Discussion started by: banjo25
5 Replies

10. Shell Programming and Scripting

Help on shell script : syntax error at line 62: `end of file' unexpected

Hi All, I have written a korn script (code pasted below). It is giving the error while debugging "new.sh: syntax error at line 62: `end of file' unexpected". I have re-written the whole code in VI and explored all help related to this error on this Unix forum and tried it. Somehow, I could... (7 Replies)
Discussion started by: schandrakar1
7 Replies
Login or Register to Ask a Question