如何使用nawk / awk根据文件中某列中的值将记录重定向到不同的输出文件?
chethan RA
Ramesh RA
Sachin RA
Gundaa DI
dravid DI
Suresh SE
所以我想将RA记录重定向到一个文件,将DI记录重定向到另一个文件,将SE记录重定向到另一个文件。第二列中的值可以是任何不需要RA,DI或SE的值。因此,根据第二列中的不同值,需要将记录重定向到不同的文件..
答案 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