4개의 열이 있는 탭으로 구분된 파일이 있습니다. apple이라는 열 1에서 특정 패턴이 있는 행을 찾기 위해 grep을 실행하고 싶습니다.중간 사이즈~의질소. 첫 번째 숫자가 두 번째 숫자와 일치하거나 첫 번째 숫자가 두 번째 숫자보다 1 작은 행만 추출하고 싶습니다. 아래 예에서는 2, 3, 5행(헤더 행 제외)이 패턴과 일치합니다.
Col1 col2 col3 col4
apple (XY_012345, apple 6 of 10) 1 12228 12612
apple (XY_678901, apple 5 of 6) 1 12722 13220
apple (XY_234567, apple 2 of 2) 1 18437 24737
apple (XY_890123, apple 8 of 30) 1 24892 29269
apple (XY_456789, apple 12 of 12) 1 35175 35276
답변1
GNU awk에서도 비슷한 일이 있습니다:
$ gawk 'match($0, /([0-9]+) of ([0-9]+)/, a) && (a[2] == a[1] || a[2] == a[1]+1)' file
apple (XY_678901, apple 5 of 6) 1 12722 13220
apple (XY_234567, apple 2 of 2) 1 18437 24737
apple (XY_456789, apple 12 of 12) 1 35175 35276
답변2
perl -ne 'print if /(\d+) of (\d+)/ && ($1 == $2 or $1 == ($2 - 1))' < input
이것은 제공한 입력을 반복하고 다음과 같은 경우에만 줄을 인쇄하는 "한 줄" Perl 스크립트입니다.
of
" "라는 문자로 구분된 두 개의 숫자를 매칭하여 캡쳐한 후,- 첫 번째 숫자는 두 번째 숫자와 같거나 1 작습니다.