Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using bash (sed/awk) to extract rows AND columns in CSV files?

Tags:

bash

csv

sed

awk

Is bash capable of handling extracting rows and columns from csv files? Hoping I don't have to resort to python..

My 5-column csv file looks like:

Rank,Name,School,Major,Year
1,John,Harvard,Computer Science,3
2,Bill,Yale,Political Science,4
3,Mark,Stanford,Biology,1
4,Jane,Princeton,Electrical Engineering,3
5,Alex,MIT,Management Economics,2

I only want to extract the 3rd, 4th, and 5th column contents, ignoring the first row, so output looks like:

Harvard,Computer Science,3
Yale,Political Science,4
Stanford,Biology,1
Princeton,Electrical Engineering,3
MIT,Management Economics,2

So far I can only get awk to print out either each row, or each column of my CSV file, but not specific cols/rows like this case! Can bash do this?

like image 391
user1899415 Avatar asked Jan 24 '13 01:01

user1899415


People also ask

Does awk work on CSV?

You can use AWK to quickly look at a column of data in a CSV file.


2 Answers

awk -F, 'NR > 1 { print $3 "," $4 "," $5 }' 

NR is the current line number, while $3, $4 and $5 are the fields separated by the string given to -F

like image 200
that other guy Avatar answered Sep 18 '22 04:09

that other guy


Try this:

tail -n+2 file.csv | cut --delimiter=, -f3-5
like image 42
hennr Avatar answered Sep 20 '22 04:09

hennr