1

nawk / awkを使用して、ファイル内の1つの列の値に基づいてレコードを別の出力ファイルにリダイレクトする方法は?..

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

したがって、RAレコードをあるファイルにリダイレクトし、DIレコードを別のファイルにリダイレクトし、SEレコードを別のファイルにリダイレクトしたいと思います。2番目の列の値は、RA、DI、またはSEである必要はありません。したがって、2番目の列のさまざまな値に基づいて、レコードをさまざまなファイルにリダイレクトする必要があります。

4

2 に答える 2

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

後者ははるかに効率が悪くなります。

于 2011-09-16T09:40:50.510 に答える
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
于 2011-09-16T09:42:27.330 に答える