8

How would I sort a CSV file by the first column, where the first column a lowercase string, ignoring header line?

Jeff Schaller
  • 67,283
  • 35
  • 116
  • 255

3 Answers3

11

sort does not have an option to exclude header. You can remove the header using:

tail -n+2 yourfile | sort 

This tail syntax gets yourfile from second line up to the end of the file.

Of course the results of sort will not include the header.

You can isolate the header with command head -n1 yourfile which will print only the first line of your file (your header).

To combine them together you can run:

head -n1 yourfile && tail -n+2 yourfile | sort
  • 1
    Brilliant, thanks. Worked a charm. There's a typo on the first line, yourfile and youfile, in case someone else wants to use it in the future. – normannen Feb 15 '17 at 16:02
10

I assume you want to keep the header: redirect the contents of the file into a grouped construct:

{
    # grab the header and print it untouched
    IFS= read -r header
    echo "$header"
    # now process the rest of the input
    sort
} < file.csv
glenn jackman
  • 85,964
5

Using csvkit:

$ csvsort -c 1 file.csv

or just

$ csvsort file.csv

The difference is that the first command will only use the first column, while the second will use all (like sort does).

The csvkit tools assumes that the input CSV file has a header line as its first line. Use -H if the file has no header.

Kusalananda
  • 333,661