49

I've stated before I'm not very good at scripting so what I have below copies files from a share directory to mine where I change their permissions. But then I wanted to remove the first line in each of the CSV files — the headings — and then I wanted to get this to run every hour.

cd /users
scp dehpc14_Disk_Quota_Report.csv /h/u544835
scp dehpc14_User_Disk_Usage.csv /h/u544835
cd /h/u544835
chmod 755 dehpc14_Disk_Quota_Report.csv
chmod 755 dehpc14_User_Disk_Usage.csv

* insert delete csv first line here *

Can anyone help me with deleting the first line of the CSV file and getting this to run automatically every hour, for example, or direct me to something I might understand to get cracking with it?

4 Answers 4

111

You can delete the first line of a file using sed:

sed -i '' 1d file.csv

If you just want to get the contents of the file without the first line, and without modifying the file, remove the -i '' flag:

sed 1d file.csv

Here 1d is the command to execute:

  • 1 => line where to act
  • d => delete

So 1d means 'delete line 1'

If you want to get the first line, you can use sed too:

sed -n 1p file.csv

Here p stands for 'print' or

sed 1q file.csv

(see William Pursell's comment)

Sign up to request clarification or add additional context in comments.

6 Comments

Thanks very much for both the answer and the explanation
The 'sed 1p file.csv' example will print the first line twice, and every other line once. To print only the first line, you need 'sed -n 1p' (although it is more common to do 'sed 1q' and quit after printing one line.)
Note that this answer only applies to GNU sed; it does not work with BSD sed, also found on Mac OS X. BSD sed requires a suffix after the -i; if you do not want a suffix, use -i '' (with space). But the manual page explicitly recommends against that. See Unix script to delete the first line on a Mac for the details. Other Unix systems (AIX, HP-UX, Solaris, etc) may not have the -i option at all; it is not mandated by the POSIX specification for sed
@RKR this shouldn't take long (maybe if you have a huge file). What's your filesize and time to complete? Using exactly which command?
For folks getting the ERROR 1d: no such file or directory, do this instead sed -i '1d' filename.csv
|
19

I tried to delete the first row from a CSV, cd into the location and then the answer to the question didn't work for me, was getting

sed: can't read 1d: No such file or directory

So, I've used the following stated here by @amit

sed -i '1d' filename.csv

Comments

4

To create a new CSV file without the header, you can do the following:

sed 1d file_with_header.csv > file_without_header.csv

Comments

1

While looking for this answer I also found this other thread. There they say use tail, which doesn't actually make an modifications which is what the OP wanted. You could over course copy to a temporary file. Additionally, if you were going to stream the files into another tool, you could use 'tail' in a pipe and never have to write temporary files or write to disk.

How can I remove the first line of a text file using bash/sed script?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.