awk - 排除列值存在于另一个文件中的行
问题描述
我有 2 个.csv
列出 IP 和名称的文件。
我的目标是创建一个输出文件,列出 中的所有行file_a.csv
,不包括ip
已经存在的行file_b.csv
,无论该列的值是什么name
。
文件_a.csv:
ip,name,kind
10.0.0.1,AA,ID
10.0.0.2,AA,ID
10.0.0.3,BB,ID
10.0.0.4,BB,ID
10.0.0.5,CC,ID
10.0.0.6,CC,ID
和file_b.csv:
ip,name,kind
10.0.0.1,AA,ID
10.0.0.3,XX,ID
10.0.0.5,YY,ID
10.0.0.7,ZZ,ID
10.0.0.9,ZZ,ID
此示例的输出文件为:
ip,name,kind
10.0.0.2,AA,ID
10.0.0.4,BB,ID
10.0.0.6,CC,ID
到目前为止,我猜测 awk 的循环可能会起作用,但我不确定如何进行比较:
awk -F ',' 'NR==FNR{c[$1]++;next}; <comparison missing>' file_a.csv file_b.csv > new_file.csv
欢迎任何其他实现目标的命令。
解决方案
请您尝试以下操作。
awk 'BEGIN{FS=","} FNR==NR{a[$1]=$0;next} ($1 in a){delete a[$1]} END{for(i in a){if(a[i]){print a[i]}}}' file_a.csv file_b.csv
为了照顾文件中的标题,请尝试以下操作。
awk '
BEGIN{
FS=","
}
FNR==1 && ++count==1{
print
next
}
FNR==NR{
a[$1]=$0
next
}
($1 in a){
delete a[$1]
}
END{
for(i in a){
if(a[i]){
print a[i]
}
}
}' Input_file_a.csv Input_file_b.csv
输出如下。
ip,name,kind
10.0.0.2,AA,ID
10.0.0.4,BB,ID
10.0.0.6,CC,ID
推荐阅读
- javascript - 未定义索引错误php(提交标签未在mysql表中输入信息)
- r - R中的pkstwo错误
- python - Anaconda 不安装导航器
- c# - 映射 hbm 文件时出现错误“命名空间中的元素 'class' 具有无效的子元素 'set'”
- php - 如何将数组中的值解析到我的 Googl pi 图表中
- ruby - OCRA 无法将 ruby 转换为 exe
- java - org.json 的嵌套数组
- jspdf - 如何制作 jspdf 自动表格景观?
- ios - 在枚举中使用静态让而不是大小写
- javascript - 用另一个源文件中的另一个函数扩展 function()