gpt4 book ai didi

bash - gsub 与 awk 按名称对文件进行处理

转载 作者:行者123 更新时间:2023-11-29 09:41:51 24 4
gpt4 key购买 nike

我正在尝试学习如何将 awk 与 gsub 用于特定字段,但传递名称,而不是此数据的列号:

especievalida,nom059
Rhizophora mangle,Amenazada (A)
Avicennia germinans,Amenazada (A)
Laguncularia racemosa,Amenazada (A)
Cedrela odorata,Sujeta a protección especial (Pr)
Litsea glaucescens,En peligro de extinción (P)
Conocarpus erectus,Amenazada (A)
Magnolia schiedeana,Amenazada (A)
Carpinus caroliniana,Amenazada (A)
Ostrya virginiana,Sujeta a protección especial (Pr)

我试过了

awk -F, -v OFS=","   '{gsub("\\(.*\\)", "", $2 ) ; print $0}' 

删除第二列($2)括号内的所有内容;但我真的希望能够将“nom059”传递给表达式,以获得相同的结果

最佳答案

读取输入文件的第一行(标题行)时,构建一个数组(下面的 f[]),将字段名称映射到字段编号。然后,您只需使用字段的名称作为 f[] 的索引即可访问这些字段,以获取其编号和内容:

$ cat tst.awk
BEGIN {
FS = OFS = ","
}
NR==1 {
for (i=1; i<=NF; i++) {
f[$i] = i
}
}
{
gsub(/\(.*\)/,"",$(f["nom05"]))
print
}

$ awk -f tst.awk file
especievalida,nom059
Rhizophora mangle,Amenazada
Avicennia germinans,Amenazada
Laguncularia racemosa,Amenazada
Cedrela odorata,Sujeta a protección especial
Litsea glaucescens,En peligro de extinción
Conocarpus erectus,Amenazada
Magnolia schiedeana,Amenazada
Carpinus caroliniana,Amenazada
Ostrya virginiana,Sujeta a protección especial

顺便说一下,请阅读https://www.gnu.org/software/gawk/manual/gawk.html#Computed-Regexps为什么您应该使用 gsub(/.../ (常量或文字正则表达式)而不是 gsub("..." (动态或计算正则表达式) .

关于bash - gsub 与 awk 按名称对文件进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57893307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com