次のファイルがあります。
主なファイル:
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
代わりに使用できます。RT
printf "Record|%s", $0