Wednesday, November 26, 2008

Konversi Format File Teks Windows ke Unix Menggunakan Shell

Windows dan Unix menggunakan format yang berbeda dalam file teks mereka. Pada Windows, setiap baris diakhiri dengan karakter ASCII line feed dan carriage return (\n\r). Sementara itu pada Unix masing-masing baris dipisahkan dengan karakter ASCII line feed saja (\n). Di Unix, file format teks ini akan menampilkan karakter carriage return dengan Ctrl-M (^M) pada setiap akhir barisnya. Sangat jelas terlihat ketika sedang menyunting file menggunakan perintah vi.

Walaupun beberapa editor di Windows maupun di Linux menyediakan fungsi untuk konversi dari dari format Windows ke Unix dan sebaliknya, ternyata ada solusi yang lebih sederhana, yaitu menggunakan shell command di Unix, dengan menggunakan perintah tr untuk menghapus karakter-karakter carriage return. Berikut ini adalah contoh perintahnya :

tr -d '\r' <> output_file

Perintah diatas akan menghilangkan karakter carriage return pada file input_file dan menyimpannya ke dalam file output_file.

Untuk mengkonversi file secara batch, misalnya dalam satu direktori dan termasuk subdirektorinya, dapat menggunakan cara-cara berikut ini:

  1. Buat file script dengan nama misalnya convert.sh yang berisi:

  2. temp="/tmp/temp.tmp"
    files=$@
    for file in $files
    do
    tr -d '\r' < $file > $temp
    mv $temp $file
    done


  3. Mengubah permission dari file convert.sh menjadi executable dengan menjalankan perintah:

  4. chmod +x convert.sh

  5. Menjalankan perintah berikut untuk mengkonversi file secara batch:

  6. find [directory] -name [pattern] -type f | xargs ./convert.sh

    Misalkan semua file berekstensi *.txt pada direktori /home/test berikut subdirektorinya akan dikonversi, maka perintahnya adalah:

    find /home/test -name *.txt -type f | xargs ./convert.sh

7 comments:

kusut said...

tr -d '\r' <> output_file


typo??

tip yg mantap. walopun kynya ga bakal gw pake hehehe...

iang said...

ada aplikasi namanya dos2unix yg ada di paket tofrodos.

mahli said...

+1 @iang

bobz said...

ouwww.. pantes report gw di unix ada ^M dan ^L :P that explains a lot :P

Kalo ^M kan '\r\, Kalo ^L apa ko?

Delonick said...

Tenkgyu Bro infonya...Sangat bermanfaat...Hehehe...

Eko Budi Prasetyo said...

@kusut:
Hehehe, yang kayak bginian mah lo udah ga level kali

@iang:
Thx buat infonya. Kmaren waktu browsing juga dapet info dos2unix, cuma nggak tahu nama paketnya apa

@bobby:
^L? Waduh, gw baru tau tuh Bob. Dari googling sih itu katanya page mark character. Cuma nggak ngerti gimana caranya masukin karakter yg spt itu di Unix. Bisa minta sample nya? :P

iang said...

cari2 paket mah di packages.ubuntu.com aja. kan ada tu bagian "Search the contents of packages"