はい

はい

現在の行番号からyyyy-mm-dd形式の日付で始まる行番号を見つける方法は?以下の例では、次から始まる行の行番号を知りたいです。2016-10-09 ggg現在行番号の10から始まります。 10からN + 1までの行には特定のパターンがなく、これらの行は日付で始まりません。私の現在のコードは次のとおりです。

lineNos=($(grep -n ERROR $file | cut -d':' -f1 | tail -3))
length=${#lineNos[@]} 
for((i=0;i<length;i++));do 
  lineNumber=${lineNos[i]}`
  endLineNo= Need to find this
 sed -n "${lineNumber},${endLineNo}p" $file
done

はい

    2016-10-04 mmmus
10 2016-10-09エラーdddd
11tttttt
12個のエラー
    ...
いいえ...
N+1 2016-10-09 ggg
N+2 2016-10-10 はい

答え1

これはawkを使った古典的な仕事なので、おそらく「最初のgrep」は必要ありません。

cat myfile | awk '/pattern1/ {start=1} /pattern2/ {if (start) print NR}'

本当にパターン2を探したいのですが、LINEラインでのみ検索を開始した場合は、次のようにできます。

cat myfile | awk '/pattern2/ {if (NR>'$LINE') print NR}'

答え2

offset=$(grep -n 'pattern1' /path/to/input | cut -d: -f1)
awkcmd="/pattern2/ { \$1 = \$1 - $offset; print \$0 }"
cat -n /path/to/input | awk "$awkcmd"

関連情報