gpt4 book ai didi

bash - 如何根据另一个文件的列表值从 csv 文件中删除行?

转载 作者:行者123 更新时间:2023-11-29 09:36:08 25 4
gpt4 key购买 nike

我有两个文件:

candidates.csv :

id,value
1,123
4,1
2,5
50,5

blacklist.csv :

1
2
5
3
10

我想从 candidates.csv 中删除所有行其中第一列 ( id ) 的值包含在 blacklist.csv 中. id始终是数字。在这种情况下,我希望我的输出看起来像这样:

id,value
4,1
50,5

到目前为止,我用于识别重复行的脚本如下所示:

cat candidates.csv | cut -d \, -f 1 | grep -f blacklist.csv -w

这给了我输出

1
2

现在我需要以某种方式将此信息通过管道返回到 sed 中/awk/gawk/...删除重复项,但我不知道如何。有什么想法可以从这里继续吗?还是有更好的解决方案?我唯一的限制是它必须在 bash 中运行。

最佳答案

以下情况如何:

 awk -F, '(NR==FNR){a[$1];next}!($1 in a)' blacklist.csv candidates.csv

这是如何运作的?

awk 程序是一系列模式- Action 对,写为:

condition { action }
condition { action }
...

哪里condition通常是一个表达式并且 action一系列命令。在这里,第一个条件- Action 对显示为:

  • (NR==FNR){a[$1];next}如果总记录数NR等于文件的记录数 FNR (即如果我们正在读取第一个文件),将所有值存储在数组 a 中并跳到下一条记录(不要做任何其他事情)
  • !($1 in a)如果第一个字段不在数组中 a然后执行打印该行的默认操作。这仅适用于第二个文件,因为第一个条件-操作对的条件不成立。

关于bash - 如何根据另一个文件的列表值从 csv 文件中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52649404/

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