从csv文件的特定行打印特定字段linux

mac*_*ice 9 linux awk

我正在尝试提取 CSV 文件特定行中的特定字段。

我可以根据行号来完成,但有时文件的行号会改变,所以这不是那么灵活。

我想尝试在我感兴趣的字段之前提取一个特定的名称。

CSV 文件

[Header]
File,5
Researcher Name,Joe Black
Experiment,Illumina-Project
Date,05/02/2021
Pipeline,RNA_Pipeline
Run Code Online (Sandbox Code Playgroud)

在本例中,我想从 CSV 文件中提取研究人员和实验名称:

CSV 文件的所需输出

Joe Black Illumina 项目

以下方法有效,但正如我所说,它不那么灵活:

awk -F',' 'NR == 3 { print $2 }' test.csv
Run Code Online (Sandbox Code Playgroud)

所以我试图做一些类似我发现的事情但没有成功

 awk -F',' 'Line == "Researcher Name" { print $1 }' test.csv
Run Code Online (Sandbox Code Playgroud)

Ed *_*ton 5

每当您的输入数据包含名称-值对时,最好首先创建一个包含这些映射的数组(f[]如下),然后您可以通过按名称索引数组来按您喜欢的顺序打印/测试/修改您喜欢的任何值。

看看用这种方法做你想做的事情是多么容易:

$ awk -F, '{f[$1]=$2} END{print f["Researcher Name"], f["Experiment"]}' file
Joe Black Illumina-Project
Run Code Online (Sandbox Code Playgroud)

而且还可以轻松地执行您将来可能需要的任何其他操作,例如:

$ 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
Run Code Online (Sandbox Code Playgroud)