GREP - 50승 이상을 한 사람을 찾는 방법

GREP - 50승 이상을 한 사람을 찾는 방법

저는 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하도록 변경해야 하며 숫자가 단어 경계 뒤에 오므로 숫자나 문자가 없음을 나타내기 위해 추가해야 합니다. 바로 앞에 가 있고 세 자리 부분의 첫 번째 부분을 로 변경하여 앞에 0이 오는 세 자리 숫자가 없도록 합니다.-P\b\d[1-9]

grep -P '\b([5-9][1-9]|60|[1-9]\d\d)$' f1.txt

이는 단지 두 자릿수 또는 세 자릿수 승리를 가정한 것입니다.

\비첫 번째 숫자 앞에는 숫자나 문자가 올 수 없음을 나타내는 단어 경계를 나타냅니다.
()즉, 단어 경계 뒤에는 대괄호 안에 내용을 정의해야 합니다.
[5-9][1-9]첫 번째 숫자가 5-9이고 다른 숫자가 1-9인 두 자리 숫자가 있어야 함을 의미합니다. 즉, 숫자 51-99를 캡처하고 60을 제외한다는 의미입니다.
|or 연산자를 의미하며 이전 정규식에서는 60이 제외되었으므로 [5-9][1-9]or 60이라고 합니다.
|[1-9]\d\d또는 3자리 숫자를 나타냅니다. 여기서 첫 번째 숫자는 1-9이고 그 뒤에 임의의 두 자리 숫자가 [1-9]\d\d옵니다 . [1-9][0-9][0-9]
$줄 끝을 나타냅니다. 마지막 필드에 없고 뒤에 줄 끝이 오지 않는 숫자를 포착하지 않도록 마지막 숫자 뒤에 줄 끝이 있어야 합니다.

따라서 기본적으로 grep은 단어 경계를 찾은 다음 50보다 큰 두세 자리 숫자, 줄 끝을 찾습니다.


이 부분은 [5-9][1-9]|6051-99의 두 자리 숫자를 찾고, 이 부분은 [1-9]\d\d첫 번째 숫자가 1-9인 세 자리를 찾습니다. 세 자리 이상을 사용하려면 다른 숫자를 추가하거나 |다음과 같이 사용하세요.

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

관련 정보