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.

  1. 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
    
  2. Siapkan array

    cctld = ("sg" "my" "id" "th")
    
  3. Guna for loop untuk capai setiap elemen dalam array

    
    for i in "${cctld[@]}"
    do 
    
    	<arahan>
    
    done 
    
  4. 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^^}
    
  5. Guna awk untuk padankan dan print baris:

    
    awk -F, '{if ($4==$tld) print $0}' >> tmp 
    
  6. 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