#102 - bash & awk
Minggu lepas saya perlu buat bash skrip yang:
- baca lajur yang ke-4 dalam file csv
- kalau padan dengan pembolehubah, masukkan kandungan barisan ke dalam fail
- salin fail ke folder yang berkenaan
Perkara yang hendak dipadankan ialah country code top level domain, contohnya MY (untuk Malaysia). Saya perlu padankan dengan lebih 50 cctld. Biasanya saya akan guna awk untuk tujuan ini. Dalam hal in oleh kerana kita akan membuat carian seraca ulangan, perlu gabungkan dengan skrip bash.
-
Contoh input - csv (comma separated value) Beri perhatian kepada lajur ke-4 (i.e. MY)
timestamp,src_ip,src_port,country_code,ASN 202103100531,192.168.1.101,31233,MY,1337 202103100531,192.168.1.44,21003,TH,1337 202103100531,192.168.1.55,34330,SG,1337 202103100531,192.168.2.189,34399,ID,1337
-
Siapkan array
cctld = ("sg" "my" "id" "th")
-
Guna for loop untuk capai setiap elemen dalam array
for i in "${cctld[@]}" do <arahan> done
-
Oleh kerana string dalam lajur ke-4 adalah dalam huruf besar, maka kita boleh tukar setiap pembolehubah kepada huruf besar dengan “^^”. Jadi dari “my” -> “MY”
tld=${i^^}
-
Guna awk untuk padankan dan print baris:
awk -F, '{if ($4==$tld) print $0}' >> tmp
-
Jika fail ada kandungan, salin ke folder yang berkenaan. Dalam bash kita boleh guna “-s” untuk periksa saiz fail.
if [[ -s "tmp" ]]; then cp tmp $i/$i.csv fi
Selamat mencuba