linux - 删除列 csv 文件,其中一些包含带引号的文本,包括逗号
问题描述
我有一个包含数百列和 80 行的 csv 文件。我需要从文件中删除前 13 列。我试过使用:
cut -d, -f1-13 -- 补码 input.csv > output.csv
但问题是第一列中的一个包含带引号的文本,包括逗号,并且 cut 无法处理这种格式。示例输入:
标头A,标头B,标头C,标头D,标头E,标头F,标头G,标头H A,“B,B”,C,“D,D,D,D”,E,F,G,H A,“B,B”,C , "D, D, D, D", E, F, G, H A, "B, B", C, "D, D, D, D", E, F, G, H
期望的输出:
标头E, 标头F, 标头G, 标头H E, F, G, H E, F, G, H E, F, G, H
在示例中,我在类似条件下使用较少数量的列。理想情况下,该解决方案应该可以扩展到任意数量的列和行(在我的例子中是 13 列和 80 行)。我曾尝试使用 awk 寻找解决方案,但它们通常包括打印除要删除的列之外的所有列,并且由于列的数量众多,这不是一个实际的解决方案。
解决方案
考虑到您设定的特定条件,这样的事情会起作用:
grep -oE '(("[^"]+"|[^,]+),?){5}$' input.csv > output.csv
其中5
in{5}
替换为您想要剩余的列数。因此,给定N
列,其中前 13 列将被省略,该值将是N - 13
。
注意: 如果任何引用的列数据本身包含引号,例如 ,则正则表达式将无法正确匹配"some \"data\" in quotes"
,尽管可以调整模式以适应这种情况(但它变得相当复杂)。
推荐阅读
- ms-access-2016 - MS Access - 根据单元格内容选择字段
- xml - 需要使用 Ktor 框架将 Saber API 集成到 SOAP xml 中
- java - 如何保持 session.attribute 从 jsp 到 servlet
- css - Mat-Stepper - 将特定步骤更改为仅点
- tensorflow - 使用 Estimator export_saved_model 时出错(未找到:检查点中未找到关键 global_step)
- javascript - 将对象嵌套数组合并到一个新数组中
- flutter - Flutter 卡在安装 build\app\outputs\apk\app.apk
- angularjs - responseError 在 httpInterceptor 中总是得到 -1 状态
- python - 使用 OpenCV 校准和校正立体相机
- c# - 从多对多关系中选择带有 LINQ 查询的嵌套列表