如何使用nawk / awk根据文件中某列中的值将记录重定向到不同的输出文件?

时间:2011-09-16 09:24:28

标签: unix awk solaris nawk

如何使用nawk / awk根据文件中某列中的值将记录重定向到不同的输出文件?

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

所以我想将RA记录重定向到一个文件,将DI记录重定向到另一个文件,将SE记录重定向到另一个文件。第二列中的值可以是任何不需要RA,DI或SE的值。因此,根据第二列中的不同值,需要将记录重定向到不同的文件..

2 个答案:

答案 0 :(得分:3)

您可以尝试这样的事情:

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

考虑一些 awk 实现可以一次打开有限数量的文件。 如果是这种情况,您将需要更多代码,如下所示:

[更正,见下面的评论]

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

后者效率会低得多。

答案 1 :(得分:2)

1,使用代码标签使代码易于阅读。

kent$  cat a
chethan RA 
Ramesh RA 
Sachin RA 
Gundaa DI 
dravid DI 
Suresh SE


kent$  awk '{print >> $2".txt"}' a


kent$  l
total 16K
-rw-r--r-- 1 kent kent 66 2011-09-16 11:39 a
-rw-r--r-- 1 kent kent 22 2011-09-16 11:42 DI.txt
-rw-r--r-- 1 kent kent 34 2011-09-16 11:42 RA.txt
-rw-r--r-- 1 kent kent 10 2011-09-16 11:42 SE.txt

kent$  head *.txt
==> DI.txt <==
Gundaa DI 
dravid DI 

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

==> SE.txt <==
Suresh SE