csv - 如果使用 awk 或 sed 某些正则表达式为真,则更改列
问题描述
我有一个与此类似的文件(我们称之为 data.csv)
"123","456","ud,h-match","moredata"
具有相同格式的许多行和嵌入的逗号。我需要做的是查看第三列,看看它是否有表达式。在这种情况下,我想知道第三列是否在任何地方都有“匹配”(确实如此)。如果有的话,那么我将整个列替换为“替换”之类的其他内容。因此,要将其与示例 data.csv 文件相关联,我希望它看起来像这样。
“123”、“456”、“替换”、“更多数据”
理想情况下,我希望更改文件 data.csv 本身(时间很重要,因为我有一个大文件),但如果您将其写入另一个文件也可以。
编辑:
我尝试过使用 awk:
awk -F'","' -OFS="," '{if(tolower($3) ~ "stringI'mSearchingFor"){$3="replacement"; print}else print}' file
但它并没有改变任何东西。如果我删除 OFS 部分,那么它可以工作,但它会被空格分隔,并且列不会被双引号括起来。
解决方案
根据我对您的意思的问题的回答column
,这可能是您想要的(使用 GNU awk 进行 FPAT):
$ awk -v FPAT='[^,]+|"[^"]+"' -v OFS=',' '$3~/match/{$3="\"replaced\""} 1' file
"123","456","replaced","moredata"
awk -i inplace ...
如果您想进行“就地”编辑,请使用。
使用任何 awk (但比上面的更脆弱,因为它"
在第一个和最后一个字段上留下前导/尾随,并且没有-i inplace
):
$ awk 'BEGIN{FS=OFS="\",\""} $3~/match/{$3="replaced"} 1' file
"123","456","replaced","moredata"
推荐阅读
- c# - 根据触摸移动速度减小比例
- filtering - VersionOne:按项目过滤问题
- python - 使用元类来定义方法、类方法/实例方法
- pagespeed-insights - 带有图片标签的 PageSpeed Insights LCP
- python - 将数据帧除以不同的可能组合,并在单独的数据帧中为所有组合随机获取百分之几的数据
- python - 使用python根据原点、终点、中心、距离和方位计算圆弧坐标
- javascript - 如何在 D3.js 中的 Y 轴上设置不等间隔?
- php - 添加新数据MySQL PHP时从表中获取ID并插入另一个表
- c - 为什么选项卡式空间宽度不恒定
- javascript - 将 RECAPTCHA 从 v2 更新到 v3