두 개의 일치하는 숫자 또는 첫 번째 숫자가 두 번째 숫자보다 1 작은 문자열을 사용하는 방법은 무엇입니까?

두 개의 일치하는 숫자 또는 첫 번째 숫자가 두 번째 숫자보다 1 작은 문자열을 사용하는 방법은 무엇입니까?

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 작습니다.

관련 정보