저는 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]|60
51-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