Saturday, March 30, 2019

Membagi Teks File Dengan CSPLIT

Memanipulasi teks atau string memang banyak jenisnya. Dan somehow saya suka mempelajari hal tersebut. Ya mungkin karena hidup saya ngga jauh-jauh dari hal yang namanya manipulasi teks atau string. Catatan saya kali ini adalah tentang bagaimana cara membagi atau memotong sebuah file berdasarkan kata atau karakter tertentu.

Bingung? Ya contoh termudah adalah katakanlah kita memiliki teks file yang berisi dokumen misalnya cerpen atau catatan. Dan catatan tersebut memiliki paragraf-paragraf. Nah, kita bisa membagi teks file tersebut menjadi sejumlah file berdasarkan tiap paragraf. 

Penting? Ya ngga penting-penting amat si. Tapi buat sysadmin, devops atau orang yang biasa manipulasi output atau string, mungkin suatu saat bisa bermanfaat.

Ok, saya kebetulan ngga punya cerpen nih. Jadi saya ambil sample dari command yang mungkin biasa kita gunakan.

misalkan saya memiliki string yang dihasilkan dari perintah
ifconfig > ifconfig-output.txt
file ifconfig-output.txt akan memiliki konten kurang lebih sebagai berikut :
enp4s0f0: flags=4099  mtu 1500
        ether b8:88:e3:09:e5:22  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 18  

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 64759  bytes 4163120 (4.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64759  bytes 4163120 (4.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099  mtu 1500
        inet 192.168.123.1  netmask 255.255.255.0  broadcast 192.168.123.255
        ether 52:54:00:3d:85:62  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp3s0: flags=4163  mtu 1500
        inet 192.168.8.101  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 fe80::67de:11b6:fd22:f963  prefixlen 64  scopeid 0x20
        ether dc:85:de:4c:bf:ab  txqueuelen 1000  (Ethernet)
        RX packets 183883  bytes 134391172 (134.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 180311  bytes 36659731 (36.6 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions
Kemudian saya mencoba membagi informasi diatas menjadi masing-masing interface satu file (berarti akan ada 4 bagian)  menggunakan perintah
csplit ifconfig-output.txt /^$/ {*} -n 3 --prefix=interface
Dan voila. file ifconfig-output.txt pun sudah terbagi menjadi 4 pecahan  sesuai dengan interface masing-masing:
Output csplit

Wait, interfacenya kan 4, tapi kenapa file yang dihasilkan ada 5 file? Hal ini terjadi karena pada baris terakhir file ifconfig-output.txt adalah baris kosong, sehingga file yang terakhir (dalam tutorial ini interface004 hanya berisi baris kosong. tidak ada teks di dalamnya. Masuk? ;)

Oke, dan berikut adalah penjelasan parameter/opsi command diatas:
  • /^$/ adalah string atau karakter yang digunakan sebagai batas antar paragraf yaitu baris kosong
  • {*} lakukan pemotongan tanpa batas (sampai file habis)
  • -n 3 identitas nama belakang file sebagai pembeda (dalam hal ini 000, 001, 002 dan seterusnya)
  • --prefix nama depan file yang dibuat
Semoga bermanfaat.

referensi :

No comments:

Post a Comment