Как перенаправить записи в разные выходные файлы на основе значения в одном из столбцов в файле с помощью nawk / awk? - PullRequest
1 голос
/ 16 сентября 2011

Как перенаправить записи в разные выходные файлы, основываясь на значении в одном из столбцов файла, используя nawk / awk? ..

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

Поэтому я хочу перенаправить записи RA в один файл,DI записывает в другой файл и SE записывает в другой файл.Значение во втором столбце может быть любым, не обязательно RA, DI или SE.Поэтому, основываясь на разных значениях во втором столбце, записи должны перенаправляться в разные файлы ..

Ответы [ 2 ]

3 голосов
/ 16 сентября 2011

Вы можете попробовать что-то вроде этого:

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

Последнее будет гораздо менее эффективным.

2 голосов
/ 16 сентября 2011

1, с использованием тега code для удобства чтения кодов.

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
...