예

현재 줄 번호에서 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
11ttttt
12개의 오류
    ...
니...
N+1 2016-10-09 ggg
N+2 2016-10-10 예

답변1

이것은 awk를 사용한 고전적인 작업이므로 아마도 "first 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"

관련 정보