현재 줄 번호에서 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"