gpt4 book ai didi

csv - 使用 awk 解析 csv 并忽略字段内的逗号

转载 作者:行者123 更新时间:2023-12-03 02:40:13 26 4
gpt4 key购买 nike

我有一个 csv 文件,其中每一行定义给定建筑物中的一个房间。除了房间之外,每行都有一个楼层区域。我想要提取的是所有建筑物的所有楼层。

我的文件看起来像这样...

"u_floor","u_room","name"
0,"00BDF","AIRPORT TEST "
0,0,"BRICKER HALL, JOHN W "
0,3,"BRICKER HALL, JOHN W "
0,5,"BRICKER HALL, JOHN W "
0,6,"BRICKER HALL, JOHN W "
0,7,"BRICKER HALL, JOHN W "
0,8,"BRICKER HALL, JOHN W "
0,9,"BRICKER HALL, JOHN W "
0,19,"BRICKER HALL, JOHN W "
0,20,"BRICKER HALL, JOHN W "
0,21,"BRICKER HALL, JOHN W "
0,25,"BRICKER HALL, JOHN W "
0,27,"BRICKER HALL, JOHN W "
0,29,"BRICKER HALL, JOHN W "
0,35,"BRICKER HALL, JOHN W "
0,45,"BRICKER HALL, JOHN W "
0,59,"BRICKER HALL, JOHN W "
0,60,"BRICKER HALL, JOHN W "
0,61,"BRICKER HALL, JOHN W "
0,63,"BRICKER HALL, JOHN W "
0,"0006M","BRICKER HALL, JOHN W "
0,"0008A","BRICKER HALL, JOHN W "
0,"0008B","BRICKER HALL, JOHN W "
0,"0008C","BRICKER HALL, JOHN W "
0,"0008D","BRICKER HALL, JOHN W "
0,"0008E","BRICKER HALL, JOHN W "
0,"0008F","BRICKER HALL, JOHN W "
0,"0008G","BRICKER HALL, JOHN W "
0,"0008H","BRICKER HALL, JOHN W "

我想要的是所有建筑物的所有楼层。

我正在使用 cat、awk、sort 和 uniq 来获取此列表,尽管我在建筑物名称字段中遇到“,”问题,例如“BRICKER HALL,JOHN W”,并且它丢弃了我的整个 csv一代。

cat Buildings.csv | awk -F, '{print $1","$2}' | sort | uniq > Floors.csv 

如何让 awk 使用逗号但忽略字段“”之间的逗号?或者,有人有更好的解决方案吗?

根据提供的答案,建议使用 awk csv 解析器,我得到了解决方案:

cat Buildings.csv | awk -f csv.awk | awk -F" -> 2|"  '{print $2}' | awk -F"|" '{print $2","$3}' | sort | uniq > floors.csv 

我们想要使用csv awk程序,然后从那里我想使用“-> 2|”这是基于 csv awk 程序的格式化。那里的 print $2 仅打印 csv 解析的内容,这是因为程序打印原始行,后跟“-> #”,其中 # 是从 csv 解析的计数。 (即列。)从那里我可以将这个 awk csv 结果拆分为“|” whcih 是它替换逗号的内容。然后排序、uniq 并通过管道输出到文件就完成了!

感谢您的帮助。

最佳答案

gawk -vFPAT='[^,]*|"[^"]*"' '{print $1 "," $3}' | sort | uniq

这是一个很棒的 GNU Awk 4 扩展,您可以在其中定义字段模式而不是字段分隔符模式。对 CSV 来说有奇效。 (docs)

预计到达时间(感谢 mitchus): 要删除周围的引号,gsub("^\"|\"$","",$3);如果有更多字段需要以这种方式处理,而不仅仅是 $3,则只需循环遍历它们即可。
请注意,这种简单的方法不能容忍格式错误的输入,也不能容忍引号之间的某些可能的特殊字符 - 覆盖所有这些将超出整洁的单行代码的范围。

关于csv - 使用 awk 解析 csv 并忽略字段内的逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4205431/

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