首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在文件的选定列中查找并替换大量字符串

在文件的选定列中查找并替换大量字符串
EN

Stack Overflow用户
提问于 2018-06-01 03:10:25
回答 1查看 79关注 0票数 1

我有一个很大的CSV文件(~1 1GB)- data.csv

一个变量,包含大量以竖线分隔的字符串。

list="abc|def|ghi.........."

Objective用于在data.csv的第2列和第3列中搜索list变量中列出的每个字符串,并将其替换为字符串unassigned

下面是我想出来的,

awk -v list="$list" 'BEGIN{FS=OFS=","}{gsub(list,"unassigned",$2)}{gsub(list,"unassigned",$3)}1' data.csv > data_new.csv

只要列表很小,它就可以正常工作。一旦list变量超过了大约10k个字符串,它就会抛出错误

/usr/bin/awk: Argument list too long

这里有没有什么解决方案可以处理这么长的列表?全新的解决方案也是受欢迎的。提前谢谢。

注意:我更喜欢避免遍历列表,因为这会降低性能。

EN

回答 1

Stack Overflow用户

发布于 2018-06-01 03:50:50

如果您使用的是bash,请执行以下操作:

代码语言:javascript
复制
awk '
BEGIN { FS=OFS="," }
NR==FNR { list=$0; next}
{ gsub(list,"unassigned",$2); gsub(list,"unassigned",$3) }
1' <<<"$list" data.csv > data_new.csv

查看Why do I get "/bin/sh: Argument list too long" when passing quoted arguments?Does "argument list too long" restriction apply to shell builtins?,了解您的原始代码发生了什么以及这是如何解决问题的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50631245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档