私はUbuntuを使って50以上のゲームで勝利したドライバをGREPしようとしています。
これは私が使用するコマンドです:
cat f1.txt | grep -E " ([5-9][1-9]|[1-9][0-9][0-9])*" | sort -n -k5 | uniq -c | tail -n 5
Rank Country Driver Races Wins
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel 254 53
3 [Spain] Fernando_Alonso 311 32
4 [Finland] Kimi_Raikkonen 326 21
5 [Germany] Nico_Rosberg 206 23
6 [Germany] Michael_Schumacher 307 91
7 [Finland] Valtteri_Bottas 153 9
8 [United_Kingdom] Jenson_Button 306 15
9 [Brazil] Felipe_Massa 269 11
10 [Australia] Daniel_Ricciardo 185 7
11 [Netherlands] Max_Verstappen 116 9
12 [Australia] Mark_Webber 215 9
13 [France] Alain_Prost 199 51
14 [Mexico] Sergio_Perez 188 0
15 [Brazil] Rubens_Barrichello 322 11
16 [Brazil] Ayrton_Senna 161 41
17 [United_Kingdom] David_Coulthard 246 13
18 [Germany] Nico_Hulkenberg 180 0
19 [Brazil] Nelson_Piquet 204 23
20 [United_Kingdom] Nigel_Mansell 188 31
21 [Austria] Niki_Lauda 173 25
22 [Finland] Mika_Hakkinen 161 20
23 [Monaco] Charles_Leclerc 56 2
24 [France] Romain_Grosjean 178 0
25 [Austria] Gerhard_Berger 210 10
26 [United_Kingdom] Jackie_Stewart 100 27
27 [United_Kingdom] Damon_Hill 115 22
28 [Spain] Carlos_Sainz_Jr. 115 0
29 [Germany] Ralf_Schumacher 180 6
30 [Argentina] Carlos_Reutemann 146 12
31 [Colombia] Juan_Pablo_Montoya 94 7
32 [United_Kingdom] Graham_Hill 177 14
33 [Brazil] Emerson_Fittipaldi 145 14
34 [Italy] Riccardo_Patrese 256 6
35 [Argentina] Juan_Manuel_Fangio 58 24
36 [Italy] Giancarlo_Fisichella 230 3
37 [United_Kingdom] Jim_Clark 72 25
38 [Poland] Robert_Kubica 97 1
39 [Australia] Jack_Brabham 127 14
40 [Germany] Nick_Heidfeld 183 0
41 [South_Africa] Jody_Scheckter 112 10
42 [New_Zealand] Denny_Hulme 112 8
43 [Italy] Jarno_Trulli 252 1
44 [France] Jean_Alesi 201 1
45 [Canada] Jacques_Villeneuve 164 11
46 [France] Jacques_Laffite 176 6
47 [Switzerland] Clay_Regazzoni 131 5
48 [Australia] Alan_Jones 116 12
49 [Sweden] Ronnie_Peterson 123 10
50 [New_Zealand] Bruce_McLaren 102 4
51 [Russian_Federation] Daniil_Kvyat 107 0
52 [United_Kingdom] Eddie_Irvine 147 4
53 [France] Pierre_Gasly 61 1
54 [United_Kingdom] Stirling_Moss 72 16
55 [Italy] Michele_Alboreto 194 5
56 [Belgium] Jacky_Ickx 115 8
57 [France] Rene_Arnoux 149 7
58 [United_Kingdom] John_Surtees 111 6
59 [United_States] Mario_Andretti 128 12
60 [United_Kingdom] James_Hunt 92 10
61 [France] Esteban_Ocon 64 0
62 [Germany] Heinz-Harald_Frentzen 157 3
63 [United_Kingdom] John_Watson 152 5
64 [Thailand] Alexander_Albon 35 0
65 [Finland] Keke_Rosberg 114 5
66 [Denmark] Kevin_Magnussen 116 0
67 [France] Patrick_Depailler 95 2
68 [Italy] Alberto_Ascari 36 132
69 [United_States] Dan_Gurney 86 4
70 [Belgium] Thierry_Boutsen 163 3
71 [United_Kingdom] Mike_Hawthorn 48 3
72 [Italy] Nino_Farina 36 5
73 [Canada] Lance_Stroll 75 0
74 [Japan] Kamui_Kobayashi 75 0
75 [Germany] Adrian_Sutil 128 0
76 [United_Kingdom] Lando_Norris 35 0
77 [Italy] Elio_de_Angelis 109 2
78 [United_Kingdom] Paul_di_Resta 59 0
79 [Austria] Jochen_Rindt 60 6
80 [United_States] Richie_Ginther 52 1
81 [Canada] Gilles_Villeneuve 67 6
82 [Finland] Heikki_Kovalainen 111 1
83 [France] Patrick_Tambay 116 2
84 [France] Didier_Pironi 70 3
85 [United_States] Phil_Hill 51 3
86 [United_Kingdom] Martin_Brundle 158 0
87 [United_Kingdom] Johnny_Herbert 161 3
88 [France] Francois_Cevert 47 1
89 [Sweden] Stefan_Johansson 79 0
90 [New_Zealand] Chris_Amon 97 0
91 [Argentina] Jose_Froilan_Gonzalez 29 2
92 [France] Jean-Pierre_Beltoise 85 1
93 [France] Olivier_Panis 157 1
94 [United_Kingdom] Tony_Brooks 41 6
95 [Venezuela] Pastor_Maldonado 95 1
96 [France] Maurice_Trintignant 86 2
97 [Mexico] Pedro_Rodriguez 53 2
98 [Germany] Jochen_Mass 105 1
99 [United_Kingdom] Derek_Warwick 147 0
100 [United_States] Eddie_Cheever 132 0
101 [Switzerland] Jo_Siffert 97 2
102 [Italy] Alessandro_Nannini 77 1
103 [Russian_Federation] Vitaly_Petrov 57 0
104 [United_Kingdom] Peter_Revson 30 2
105 [Italy] Andrea_de_Cesaris 208 0
106 [Italy] Lorenzo_Bandini 44 1
107 [Brazil] Carlos_Pace 72 1
108 [Germany] Wolfgang_von_Trips 27 2
109 [France] Jean-Eric_Vergne 58 0
110 [France] Jean_Behra 57 0
111 [Germany] Timo_Glock 91 0
112 [Italy] Luigi_Villoresi 33 0
113 [United_Kingdom] Peter_Collins 36 3
114 [United_Kingdom] Innes_Ireland 52 1
115 [Austria] Alexander_Wurz 69 0
116 [Italy] Luigi_Musso 25 1
117 [Japan] Takuma_Sato 90 0
118 [Italy] Piero_Taruffi 18 1
119 [Sweden] Jo_Bonnier 106 1
120 [Spain] Pedro_de_la_Rosa 105 0
121 [Brazil] Bruno_Senna 46 0
122 [Finland] Mika_Salo 110 0
123 [Italy] Luigi_Fagioli 8 1
124 [United_Kingdom] Mark_Blundell 61 0
125 [United_States] Harry_Schell 63 0
126 [France] Jean-Pierre_Jarier 135 0
127 [Sweden] Gunnar_Nilsson 31 1
128 [Spain] Jaime_Alguersuari 46 0
129 [Italy] Ivan_Capelli 93 0
130 [United_States] Jim_Rathmann 12 1
131 [Brazil] Felipe_Nasr 39 0
132 [United_Kingdom] Mike_Hailwood 51 0
133 [Switzerland] Sebastien_Buemi 55 0
134 [Germany] Hans_Joachim_Stuck 74 0
135 [United_Kingdom] Mike_Spence 36 0
136 [South_Africa] Tony_Maggs 26 0
137 [Belgium] Stoffel_Vandoorne 41 0
138 [Italy] Vitantonio_Liuzzi 80 0
139 [Italy] Teo_Fabi 63 0
140 [United_States] Masten_Gregory 40 0
141 [France] Jean-Pierre_Jabouille 49 2
142 [United_States] Sam_Hanks 9 1
143 [United_Kingdom] Piers_Courage 27 0
144 [Italy] Eugenio_Castellotti 18 0
145 [United_States] Bill_Vukovich 5 2
146 [Brazil] Nelson_Piquet_Jr. 28 0
147 [United_Kingdom] Tom_Pryce 42 0
148 [United_Kingdom] Roy_Salvadori 48 0
149 [United_States] Jimmy_Bryan 9 1
150 [Belgium] Olivier_Gendebien 16 0
151 [Italy] Antonio_Giovinazzi 37 0
152 [France] Louis_Rosier 39 0
153 [Sweden] Marcus_Ericsson 97 0
154 [Italy] Pierluigi_Martini 119 0
155 [Italy] Felice_Bonetto 16 0
156 [Italy] Ludovico_Scarfiotti 11 1
157 [Germany] Karl_Kling 12 0
158 [Italy] Stefano_Modena 73 0
159 [Switzerland] Marc_Surer 82 0
160 [Netherlands] Jos_Verstappen 106 0
161 [United_Kingdom] Stuart_Lewis-Evans 14 0
162 [France] Robert_Manzon 28 0
163 [Japan] Satoru_Nakajima 74 0
164 [Italy] Vittorio_Brambilla 74 1
165 [Brazil] Roberto_Moreno 43 0
166 [Ireland] Derek_Daly 49 0
167 [United_Kingdom] Mike_Parkes 6 0
168 [United_States] Rodger_Ward 12 1
169 [Italy] Giancarlo_Baghetti 26 1
170 [Austria] Karl_Wendlinger 41 0
171 [Austria] Christian_Klien 49 0
172 [Germany] Rolf_Stommelen 55 0
173 [Italy] Bruno_Giacomelli 69 0
174 [United_Kingdom] Jonathan_Palmer 84 0
175 [Argentina] Roberto_Mieres 17 0
176 [Sweden] Reine_Wisell 23 0
177 [Brazil] Cristiano_da_Matta 28 0
178 [Mexico] Hector_Rebaque 41 0
179 [United_Kingdom] Jackie_Oliver 50 0
180 [United_States] Johnnie_Parsons 10 1
181 [United_Kingdom] Peter_Arundell 13 0
182 [Brazil] Christian_Fittipaldi 40 0
183 [France] Henri_Pescarolo 57 0
184 [Belgium] Paul_Frere 11 0
185 [United_States] Tony_Bettenhausen 13 0
186 [United_Kingdom] Cliff_Allison 16 0
187 [United_Kingdom] Richard_Attwood 17 0
188 [United_Kingdom] Peter_Gethin 30 1
189 [France] Philippe_Streiff 54 0
190 [Italy] Arturo_Merzario 57 0
191 [Switzerland] Rudi_Fischer 7 0
192 [United_States] Johnny_Thomson 9 0
193 [Germany] Hans_Herrmann 18 0
194 [New_Zealand] Howden_Ganley 36 0
195 [France] Eric_Bernard 45 0
196 [Finland] Jyrki_Jarvilehto 62 0
197 [Brazil] Mauricio_Gugelmin 74 0
198 [Brazil] Pedro_Diniz 99 0
199 [United_States] Troy_Ruttman 8 1
200 [United_States] Lee_Wallard 2 1
答え1
awk を使用すると、5 番目のフィールド (win) が 50 より大きいか数値でないすべての項目が返されます。
awk '$5 > 50' f1.txt
あなたは理解した
Rank Country Driver Races Wins
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel 254 53
6 [Germany] Michael_Schumacher 307 91
13 [France] Alain_Prost 199 51
68 [Italy] Alberto_Ascari 36 132
この場合、これは行の最後のフィールドなので、次を使用することもできます。
awk '$NF > 50' f1.txt
grepを本当に使用したい場合は、Greg Fentonの答えでこのようなものを使用できますが、Perl正規表現を使用するように-E
変更し、数字が単語の境界の後にあるので、数字や文字がないことを示すために追加する必要があります。直前にあり、3桁の最初の部分をに変更して、前にゼロが続く3桁の数字がないようにします。-P
\b
\d
[1-9]
grep -P '\b([5-9][1-9]|60|[1-9]\d\d)$' f1.txt
これは、2桁または3桁の勝利を想定したものです。
\雨最初の数字の前には、数字または文字が来ることができないことを示す単語の境界を示します。
()つまり、単語の境界の後には角かっこ内に内容を定義する必要があります。
[5-9][1-9]最初の数字が5〜9で、他の数字が1〜9の2桁の数字が必要であることを意味します。つまり、数字51〜99をキャプチャして60を除外することを意味します。
|or演算子を意味し、前の正規表現では60が除外されたため、[5-9][1-9]
or 60と呼ばれます。
|[1-9]\d\dまたは3桁の数字を表します。ここで、最初の数字は1〜9で、その後にランダムな2桁の数字が[1-9]\d\d
続きます。[1-9][0-9][0-9
]
$行の終わりを示します。最後のフィールドの後に行末が続かない数字をキャプチャしないように、最後の数字の後に行末が必要です。
したがって、デフォルトでは、grepは単語の境界を検索し、50より大きい2〜3桁の数字、行末を探します。
この部分は[5-9][1-9]|60
51-99の2桁の数字を探し、この部分は[1-9]\d\d
最初の数字が1-9の3桁を探します。 3桁以上を使用するには、別の数字を追加するか、|
次のように使用してください。
grep -P '\b([5-9][1-9]|60|[1-9]\d\d|[1-9]\d\d\d)$' f1.txt
上記の数字は4桁です。
複数の数字を使用するには、次のようなものを使用します。
grep -P '\b([5-9][1-9]|60|[1-9]\d\d)\d*$' f1.txt
何らかの理由でPerl正規表現がgrepで機能しない場合は、正規表現を拡張してみてください。
grep -E '\b([5-9][1-9]|60|[1-9][0-9][0-9])[0-9]*$' f1.txt
答え2
以下を使用する必要があると主張するのはどうですかgrep
?
grep -E '([5-9]\d|\d\d\d)$' f1.txt
生産する:
$ grep -E '([5-9]\d|\d\d\d)$' f1.txt
1 [United_Kingdom] Lewis_Hamilton 264 94
2 [Germany] Sebastian_Vettel 254 53
6 [Germany] Michael_Schumacher 307 91
13 [France] Alain_Prost 199 51
68 [Italy] Alberto_Ascari 36 132
答え3
grep
(本当に必要な場合) 次awk
のようになります。
grep -E '[[:blank:]]0*(5[1-9]|[6-9][0-9]|[1-9][0-9][0-9])[0-9]*$' infile