如何使用 nawk/awk 根据文件中某一列中的值将记录重定向到不同的输出文件?
chethan RA
Ramesh RA
Sachin RA
Gundaa DI
dravid DI
Suresh SE
所以我想将 RA 记录重定向到一个文件,将 DI 记录重定向到另一个文件,将 SE 记录重定向到另一个文件。第二列中的值可以是任何值,不必是 RA、DI 或 SE。因此,根据第二列中的不同值,需要将记录重定向到不同的文件..
你可以尝试这样的事情:
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、使用代码标签使代码易于阅读。
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