How to redirect the records to different output files based on a value in one of the columns of a file using nawk / awk?

advertisements

How to redirect records to different output files based on a value in one of the columns in a file using nawk/awk?..

chethan RA
Ramesh  RA
Sachin  RA
Gundaa  DI
dravid  DI
Suresh  SE

So I want to redirect RA records to one file, DI records to another file and SE records to another file. Value in Second column can be anything need not be RA, DI or SE. So based on different values in second column, records need to be redirected to different files..


You could try something like this:

4.1.10(4)-release$ cat infile
chethan RA
Ramesh RA
Sachin RA
Gundaa DI
dravid DI
Suresh SE
4.1.10(4)-release$ awk '{
>   f = $2 ".txt"
>   print > f
>   }' infile
4.1.10(4)-release$ head *txt
==> DI.txt <==
Gundaa DI
dravid DI 

==> RA.txt <==
chethan RA
Ramesh RA
Sachin RA 

==> SE.txt <==
Suresh SE

Consider that some awk implementations can open a limited number of files at a time. If that's the case you'll need more code, something like this:

[corrected, see comments below]

awk '{
  if (f) close(f)
  f = $2 ".txt"
  print >> f
  }' infile

The latter will be far less efficient.