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


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

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
} < file.csv

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.

  • 2
    Tip: csvkit can be installed using Homebrew with brew install csvkit. Handy! – Joshua Pinter Jan 11 '19 at 5:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.