ฉันมีไฟล์อินพุตที่มีรายการที่อยู่ ip และ ip_counts (พารามิเตอร์บางตัวที่ฉันใช้ภายใน) ไฟล์มีลักษณะดังนี้
202.124.127.26 2135869
202.124.127.25 2111217
202.124.127.17 2058082
202.124.127.16 2014958
202.124.127.20 1949323
202.124.127.24 1933773
202.124.127.27 1932076
202.124.127.22 1886466
202.124.127.18 1882955
202.124.127.21 1803528
202.124.127.23 1786348
119.224.129.200 1776592
119.224.129.211 1639325
202.124.127.19 1479198
119.224.129.201 1145426
202.49.175.110 1133354
119.224.129.210 1119525
68.232.45.132 1085491
119.224.129.209 1015078
131.203.3.8 857951
202.162.73.4 817197
207.123.58.125 785326
202.7.6.18 762603
117.121.253.254 718022
74.125.237.120 710448
68.232.44.219 693002
202.162.73.2 671559
205.128.75.126 611301
119.161.91.17 604393
119.224.129.202 559930
8.27.241.126 528862
74.125.237.152 517516
8.254.9.254 514341
ในขณะที่คุณสามารถดูที่อยู่ IP ของตัวเองไม่ได้เรียงดังนั้นฉันใช้คำสั่ง sort ในไฟล์เพื่อเรียงลำดับที่อยู่ IP ดังต่อไปนี้
cat address_count.txt | เรียงลำดับ -t -k 1,1n -k 2,2n -k 3,3n -k 4,4n & gt; sorted_address.txt
ซึ่งให้ฉันเอาท์พุทที่มีที่อยู่ ip ในการเรียงลำดับเอาท์พุทบางส่วนของไฟล์ที่แสดงด้านล่าง
4.23.63.126 15731
4.26.254.254 320705
4.27.8.254 25174
8.12.129.50 176141
8.12.223.125 11800
8.19.32.65 15854
8.19.240.53 11013
8.19.240.70 11915
8.19.240.72 31541
8.19.240.73 23304
8.20.213.28 96434
8.20.213.32 108191
8.20.213.34 170058
8.20.213.39 23512
8.20.213.41 10420
8.20.213.61 24809
8.26.195.253 28568
8.27.152.253 104446
8.27.233.125 115856
8.27.235.126 16102
8.27.235.254 25628
8.27.238.254 108485
8.27.240.125 169262
8.27.241.126 528862
8.27.241.252 197302
8.27.248.125 14926
8.254.9.254 514341
12.129.210.71 89663
15.192.45.21 20139
15.192.45.26 35265
15.193.0.148 10313
15.193.113.29 40318
15.201.49.136 14243
15.240.238.52 57163
17.250.248.95 28166
23.33.125.13 19179
23.33.125.37 17953
31.151.163.60 72709
38.99.42.37 192356
38.99.68.180 41251
38.99.68.181 10272
38.104.237.74 74012
38.108.112.103 37034
38.108.112.115 69698
38.108.112.121 92173
38.108.112.122 99230
38.112.63.238 39958
38.119.130.62 42159
46.4.28.22 19769
ตอนนี้ฉันต้องการแยกไฟล์ที่ระบุข้างต้นและแปลงเป็นรูปแบบ aaa.bbb.ccc.0 / 8 และรูปแบบ aaa.bbb.0.0 / 16 และฉันยังต้องการนับจำนวนการปรากฏของไอพีในแต่ละเครือข่ายย่อยด้วย ต้องการทำสิ่งนี้โดยใช้ bash ฉันเปิดให้ใช้ sed หรือ awk ฉันจะทำสิ่งนี้ได้อย่างไร
ตัวอย่างเช่น
8.19.240.53 11013
8.19.240.70 11915
8.19.240.72 31541
8.19.240.73 23304
8.20.213.28 96434
8.20.213.32 108191
8.20.213.34 170058
8.20.213.39 23512
8.20.213.41 10420
8.20.213.61 24809
ส่วนที่เกี่ยวกับอินพุตควรสร้าง 8.19.240.0/8 และ 8.20.213.0/8 และในทำนองเดียวกันสำหรับ / 16 โดเมนฉันยังต้องการนับการเกิดขึ้นของเครื่องในซับเน็ต ตัวอย่างเช่นในผลลัพธ์ข้างต้นซับเน็ตนี้ควรมีจำนวน 4 ในคอลัมน์ถัดไปข้างนอกจากนี้ควรเพิ่ม count.i.e ที่แสดงอยู่แล้ว (11013 + 11915 + 31541 + 23304) ในคอลัมน์อื่น
8.19.240.0/8 4 (11013 + 11915 + 31541 + 23304) 8.20.213.0/8 6 (96434 + 108191 + 170058 + 23512 + 10480 24809)
มันจะดีถ้ามีคนแนะนำวิธีที่จะทำให้สำเร็จ