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

おすすめ記事