大規模なログファイルセットから小さなログファイルを作成する

大規模なログファイルセットから小さなログファイルを作成する

次のファイルがあります。

主なファイル:

Record|1111|ABC     
text in between for record 1     
text in between for record 1     
Record|2222|XYZ     
text in between for record 2     
Record|3333|XYZ     
text in between for record 3 

各レコードのデータを含む小さなファイルを作成したいと思います。

文書:1111

Record|1111|ABC    
text in between for record 1    
text in between for record 1

文書:2222

Record|2222|XYZ
text in between for record 2

文書:3333

Record|3333|XYZ
text in between for record 3

現在私はawkを使ってこれをやっています。

awk -F"|" '
/Record/{ 
        if(s>0) {
             print line > r;
         }
s=1; 
r=$2; 
line=$0 
} 
!/Record/
{ 
line=line"\n"$0; 
}

END
{
    print line > r;
}' file

ただし、ファイルの処理にはさらに時間がかかります。各ファイルのサイズは4GBで、約75,000以上のレコードが含まれています。

これを行うより速い方法がありますか?

ベストアンサー1

GNU awkを使用すると、次のことを試すことができます。

gawk -v RS='Record[|]' -F'|' '$1{printf "%s%s", RT, $0 > $1}' file

Record|アクションとして記録区切り記号、我々は簡単に各レコードを得ることができます。 GNU awkはRS正規表現(この例のように)にすることができ、RTその式(Record|)に一致するテキストを含みます。

では使用できないため、mawk代わりに使用できます。RTprintf "Record|%s", $0

おすすめ記事