フラットファイルが特定の行数未満の場合は、ヘッダーとコンテンツを削除します。

フラットファイルが特定の行数未満の場合は、ヘッダーとコンテンツを削除します。

約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

おすすめ記事