gpt4 book ai didi

linux - 使用 awk 过滤掉无法识别的字段

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:16:16 24 4
gpt4 key购买 nike

我有一个 CVS 文件,我希望其中有一些值,例如 YN。人们正在添加评论或任意条目,例如我想删除的 NA?:

Create,20055776,Y,,Y,Y,,Y,,NA?,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055777,,,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055779,,Y,,,,,,,,Y,,,NA ?,,,Y,,,,,,TBD,,,,,,,,,

我可以使用 gsub 删除我预期的内容,例如:

$ cat test.csv | awk '{gsub("NA\\?", ""); gsub("NA \\?",""); gsub("TBD", ""); print}'
Create,20055776,Y,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,
Create,20055777,,,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055779,,Y,,,,,,,,Y,,,,,,Y,,,,,,,,,,,,,,,

然而,如果有人添加新评论,这将会中断。我正在寻找一个正则表达式来将匹配概括为“非 Y”。

我尝试了一些 negative look arounds但无法让它在我拥有的 awk 上运行,它是 GNU Awk 4.2.1,API:2.0(GNU MPFR 4.0.1,GNU MP 6.1.2)。提前致谢!

最佳答案

awk 'BEGIN{FS=OFS=","}{for (i=3;i<=NF;i++) if ($i !~ /^(y|Y|n|N)$/) $i="";print}' test.CSV
Create,20055776,Y,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055777,,,,Y,Y,,Y,,,,Y,,Y,Y,,Y,,,Y,,Y,,,Y,,,,,,,,
Create,20055779,,Y,,,,,,,,Y,,,,,,Y,,,,,,,,,,,,,,,

接受 Y/N(不区分大小写)。

关于linux - 使用 awk 过滤掉无法识别的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026451/

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