我正在尝试提取 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 文件中提取研究人员和实验名称:
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)
每当您的输入数据包含名称-值对时,最好首先创建一个包含这些映射的数组(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)