2つの一致する数字または最初の数字が2番目の数字より1小さい文字列を使用する方法は?

2つの一致する数字または最初の数字が2番目の数字より1小さい文字列を使用する方法は?

4つの列を持つタブ区切りファイルがあります。 appleという列1で特定のパターンを持つ行を見つけるためにgrepを実行したいと思います。中サイズ~の窒素。最初の数字が2番目の数字と一致するか、1番目の数字が2番目の数字より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

これは、提供された入力を繰り返し、次の場合にのみ行を印刷する「1行」Perlスクリプトです。

  • of「」という文字で区切られた2つの数字をマッチングしてキャプチャした後、
  • 最初の数字は2番目の数字と同じか1つです。

関連情報