Skip to content
Advertisement

print specific field from specific line of csv file linux

I am trying to extract a specific field in a specific line of a CSV file.

I’m able to do it according to the number row but sometimes the row number of the file will change so this is not that flexible.

I wanted to try and do it to extract a specific name before the field I’m interested in.

CSV File

[Header]
File,5
Researcher Name,Joe Black
Experiment,Illumina-Project
Date,05/02/2021
Pipeline,RNA_Pipeline

In this case, I want to extract the researcher and the Experiment Name from the CSV file:

Desired Output from CSV File

Joe Black Illumina-Project

The following works but as I said it is not as flexible:

awk -F',' 'NR == 3 { print $2 }' test.csv

So I was trying to do something like from what I’ve found but have not been successful

 awk -F',' 'Line == "Researcher Name" { print $1 }' test.csv

Advertisement

Answer

Whenever your input data contains name-value pairs it’s best to first create an array that holds those mappings (f[] below) and then you can print/test/modify whatever values you like in whatever order you like just by indexing the array by the names.

Look at how easy it is to do what you want with this approach:

$ awk -F, '{f[$1]=$2} END{print f["Researcher Name"], f["Experiment"]}' file
Joe Black Illumina-Project

but also how easy it is to do whatever else you might need in future, e.g.:

$ awk -F, '
    { f[$1]=$2 }
    END {
        if ( (f["File"] > 3) && (f["Date"] ~ /2021/) ) {
            print f["Experiment"], f["Pipeline"], f["Researcher Name"]
        }
    }
' file
Illumina-Project RNA_Pipeline Joe Black
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement