データの背後にあるシリアル番号を確認してください

データの背後にあるシリアル番号を確認してください

私の入力ファイル:

{empty line}
Test #1
data
{empty line}
Test #2
data
{empty line}
Test #3
{empty line}
Test #4
data
{empty line}
Test #5

予想出力:

1
2
4

単純なbashスクリプトを使用して各テストで利用可能なデータがある場合は、シリアル番号(ハッシュタグの後)をどのように取得できますか?

編集:各テストのデータには、日付、時刻、違いなどのいくつかの値が含まれています。 2つのテストの間に2つ以上のデータラインがあります。各テストの間には空行があります。 「テスト」数字は常に1から始まり、厳密に増加する正の整数です。

ベストアンサー1

これを行うことができます:

awk -F ' #' '
  function maybePrint() {
    if (NR > 1 && NR > lastLine + 1) {print lastSeq}
  }
  $1 == "Test" {
    maybePrint()
    lastSeq = $2
    lastLine = NR
  }
  END {
    maybePrint()
  }
' file

要件を変更するのは良いことではありませんが、パズルが好きなので、ファイルに空白行がある場合:

sed -n '
    /^Test #/ {
      s///
      =
      p
    }
    $=
  ' file \
| paste - - \
| awk -F '\t' '
    NR > 1 && $1 - prevLine > ($2 ? 2 : 0) {print prev} 
    {prevLine = $1; prev = $2}
  '

おすすめ記事