awk根据列上的条件筛选出CSV文件内容

awk根据列上的条件筛选出CSV文件内容,awk,Awk,我试图根据第二列的条件过滤掉CSV文件中的内容 例如: myfile.csv: A,2,Z C,1,B D,9,X BB,3,NN DD,8,PP WA,10,QR 排除。列表 2 9 8 所需的输出文件 C,1,B BB,3,NN WA,10,QR 如果我想排除2,我可以使用:awk-F',''$2=“2”{print}“myfile.csv。我试图找出如何迭代exclude.list文件以排除文件中的所有值 第一种解决方案(首选):以下awk可能会对您有所帮助 awk 'FNR==NR

我试图根据第二列的条件过滤掉CSV文件中的内容

例如:

myfile.csv:

A,2,Z
C,1,B
D,9,X
BB,3,NN
DD,8,PP
WA,10,QR
排除。列表

2
9
8
所需的输出文件

C,1,B
BB,3,NN
WA,10,QR
如果我想排除
2
,我可以使用:
awk-F',''$2=“2”{print}“myfile.csv
。我试图找出如何迭代exclude.list文件以排除文件中的所有值

第一种解决方案(首选):以下
awk
可能会对您有所帮助

awk 'FNR==NR{a[$1];next} !($2 in a)' exclude.list  FS="," myfile.csv
第二个解决方案(综合):通过更改输入文件的读取顺序,再添加一个
awk
,尽管第一个解决方案更可取,但我添加此解决方案是为了涵盖所有可能的解决方案:)

awk'
FNR==NR{
a[$2]=$0;
如果(!b[$2]++){c[++i]=$2};
下一个}
(a中的$1){删除a[$1]}
结束{

对于(j=1;j@JamesBrown,谢谢,先生,您的赞赏,让我开心。向您学习所有专家先生:)干杯
awk '
FNR==NR{
  a[$2]=$0;
  if(!b[$2]++){  c[++i]=$2  };
  next}
($1 in a)     {  delete a[$1]}
END{
  for(j=1;j<=i;j++){
    if(a[c[j]]){print a[c[j]]}
}}
' FS="," myfile.csv FS=" " exclude.list