gpt4 book ai didi

csv - 使用 awk 按名称获取 CSV 字段

转载 作者:行者123 更新时间:2023-12-04 14:39:16 26 4
gpt4 key购买 nike

假设我有一个带有以下格式标题的 CSV 文件:

Field1,Field2
3,262000
4,449000
5,650000
6,853000
7,1061000
8,1263000
9,1473000
10,1683000
11,1893000

我想编写一个 awk 脚本,它将采用逗号分隔的字段名称列表 target ,将其拆分为一个数组,然后仅挑选具有我指定名称的那些列。

这是我到目前为止所尝试的,并且我已经验证了 head数组包含所需的标题,以及 targets数组包含给定命令行传入的所需目标。
BEGIN{
FS=","
split(target, targets, ",")

}

NR==1 {
for (i = 1; i <= NF; i++) head[i] = $i
}

NR !=1{
for (i = 1; i <= NF; i++) {
if (head[i] in targets){
print $i
}
}
}

当我使用命令调用此脚本时

awk -v target=Field1 -f GetCol.awk Debug.csv



我什么都没打印出来。

最佳答案

我想通了,并发布了答案,以防其他人遇到同样的问题。

它与in有关我用于测试数组成员资格的关键字。
此关键字仅测试左侧的操作数是否为 之一指数 在右侧的数组中,而不是在值中。
解决方法是创建一个反向查找数组,如下所示。

BEGIN{
OFS=FS=","
split(target, t_targets, ",")
for (i in t_targets)
targets[t_targets[i]] = i
}

关于csv - 使用 awk 按名称获取 CSV 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092167/

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