awk根据列上的条件过滤掉CSV文件内容

时间:2018-03-28 13:59:11

标签: awk

我正在尝试根据第二列的条件过滤掉CSV文件中的内容。

示例:

myfile.csv:

A,2,Z
C,1,B
D,9,X
BB,3,NN
DD,8,PP
WA,10,QR

exclude.list

2
9
8

所需的输出文件

C,1,B
BB,3,NN
WA,10,QR

如果我想排除2,我可以使用:awk -F',' ' $2!="2" {print }' myfile.csv。我试图计算如何迭代exclude.list文件以排除文件中的所有值。

1 个答案:

答案 0 :(得分:2)

第一个解决方案(首选): 关注awk可能对您有帮助。

awk 'FNR==NR{a[$1];next} !($2 in a)' exclude.list  FS="," myfile.csv

第二个解决方案(综合): 通过更改Input_file(s)读取顺序再添加一个awk,虽然第一个解决方案是更优选的我正在添加这涵盖了解决方案的所有可能性:)

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