the opy book
Thu Oct 10 09:33:07 JST 2019 (modified: Fri Oct 11 09:21:03 JST 2019)
views: 1639, keywords: この記事は最終更新日が5年以上前のものです。
3. パターンによる検索
opyは、AWKのようにgrep
の拡張版として利用することができます。たとえば、次の例はseq 5
の結果から偶数の行を検索するものです。
$ seq 5
1
2
3
4
5
$ seq 5 | opy 'F1%2==0'
2
4
opy
に引数として与えたF1%2==0
のことを「パターン」と呼びます。パターンにはboolを返す式を記述できます。いくつか例を示します。
### F1の文字列の長さが3のものを検索 ###
$ cat hoge
aaa bb
ccccc d
eeee fffff
$ cat hoge | opy 'len(F1)==3'
aaa bb
### 2以上4未満を検索 ###
$ seq 5 | opy '2<=F1<4'
2
3
### 5つの数字が全て異なる行を出力 ###
$ cat nums
1 2 3 4 5
2 3 3 5 4
1 2 2 3 3
$ cat nums | opy 'len(set(F[1:]))==5'
1 2 3 4 5
正規表現は、次のようにr_
という関数を通して使えます。
### 1で終わるものを検索 ###
$ seq 30 | opy 'r_("1$")'
1
11
21
### 第2フィールドの末尾が0で終わるものを検索 ###
$ seq 30 | xargs -n 9 # これが入力
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30
$ seq 30 | xargs -n 9 | opy 'r_("0$", F2)' #r_にF2を指定
19 20 21 22 23 24 25 26 27