kn9
kn9

Reputation: 103

awk filter out CSV file content based on condition on a column

I am trying to filter out content in CSV file based on condition on 2nd column.

Example :

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

desired output file

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

If i wanted to exclude 2 , i could use : awk -F',' ' $2!="2" {print }' myfile.csv. I am trying to figure how to iterate over exclude.list file to exclude all values in the file.

Upvotes: 1

Views: 369

Answers (1)

RavinderSingh13
RavinderSingh13

Reputation: 133750

1st Solution (preferred): Following awk may help you.

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

2nd Solution (Comprehensive): Adding one more awk by changing Input_file(s) sequence of reading, though first solution is more preferable I am adding this to cover all possibilities of solutions :)

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

Upvotes: 2

Related Questions