約1000万行のフラットファイルがあります。
query
ID1
content1
content2
query
ID2
content3
content4
...
content21
query
ID3
content22
content23
...
content81
10行未満のファイルブロックはすべて削除する必要があります。たとえば、最初のブロックには4行(content2に対するクエリ)が含まれているため、削除する必要があります。この手順は、チャンクを別のファイルに分割する前に実行する必要があります。どんな提案がありますか?
ベストアンサー1
これはawkで行うことができます。
awk '
# define a long block
BEGIN{
long = 10;
}
# output long block when new block is found
($1 == "query" && n >= long){
print s;
}
# new block
($1 == "query"){
s = "";
n = 0;
}
# all lines
{
s = (s != "") ? s "\n" $0 : $0;
n++;
}
# output the long block if it is the last one in the file
END{
if (n >= long){
print s;
}
}
' input.file > output.file