> berikut adalah real problemnya.
> saya punya file dgn beberapa kolom. saya ingin mengedit file ini
> dimana file baru berisi file lama yg kolom ke-2-nya lebih besar
> dari angka 40 dan kolom ke-3 lebih kecil dari 20 maka saya akan
> ketik: awk '$2>40' jajal.dat | awk '$3<20 > jajal_edited.dat
> file tersebut berisi angka2 yg memiliki angka nol
> yg berlebihan, contoh: 82.5 ditulis 82.500000
> yg kayak begini justru mengakibatkan error pada saat
> file ybs ingin saya load dgn program lain.
> jadi kadang2 saya ketik lagi:
> sed s/00000/\/g jajal_edited.dat >jajal_final.dat

Wah ini kalo ada 100000.500000 jadi 1.5 dong?

> malah ada yg angka 0-nya kelebihan 3 menjadi 82.5000,
> nah, saya harus edit lagi yg kelebihan angka 0 sampai
> 3 biji dgn cara yg mirip seperti diatas.
> karena ada banyak hal yg mesti di-edit saya berpikiran
> utk membuat script sehingga tidak perlu ngetik sekian banyak.
> script ini akan melakukan proses editing diatas utk setiap file,
> jadi perlu masukan file input dan file output sekedar utk
> memberikan kebebasan pada pemakai. tapi ekstensinya tetap sama.
> jadi, script ini juga akan scr otomatis mengubah file input
> (dalam contoh jajal.dat) menjadi file output jajal_final.dat
> 
> saya kebingungan dalam membuat script yg interactive ini
> dan dalam merubah nama filenya.

Sebetulnya kalo pake perl mudah sekali (sorry, bukannya mau maksa 
pake perl :)).

#!/usr/bin/perl -n -i.bak
@col = split;
s/(\.[1-9]+)0*(\s+|$)/$1$2/g;
s/\.0+(\s+|$)/$1/g;
print if ($col[1] > 40 && $col[2] < 20);

Simpen filenya misalnya script.pl lalu chmod +x script.pl. Nanti 
memanggilnya tinggal './script.pl file1 file2 file3' 
atau './script.pl *.dat' misalnya. Nanti file2nya akan diedit in-
place jadi tidak perlu pusing2 pake temporary files. Aslinya akan 
dibackup dg extension .bak.

Kalo mau pake bash juga bisa. Mungkin kurang lebih gini (saya belum 
test!):

#!/bin/bash
awk '$2>40 && $3<20' $1 > $1_temporary
sed 's/(\.[1-9])0*([[:blank:]]|$)/\1\2/g' $1_temporary > $1_edited
sed 's/\.0+([[:blank:]]|$)/\1/g' $1_edited > $1_editedlagi
mv $1_editedlagi $1_final
rm -f $1_temporary $1_edited $1_editedlagi

simpen jadi script.sh misalnya lalu chmod +x script.sh, lalu 
jalaninnya './script.sh file' untuk masing2 file atau
'for f in *.dat; do ./script.sh $f; done' untuk semua *.dat.

Nah kan jadi nggak perlu interactive. Malah enak, bisa dimasukin 
cron, jadi bisa dijalanin tiap jumat sore misalnya. Kalo interactive 
kan lebih repot kalo mau digituin :)

> sori, bayangan saya, perl itu memerlukan program lain utk
> menjalankannya. apa benar begitu? karena kalau iya, maka saya
> kan perlu minta ijin utk menginstall program ybs, sedangkan
> kalau shell script, saya tinggal ubah dgn chmod agar bisa
> di-execute.

Iya, seperti shell script yg harus ada shellnya maka perl juga harus 
ada perl interpreternya. Perl ini sangat berguna sekali untuk 
sysadmin, rugi kalo gak diinstall, saya rasa sysadminnya mau pasangin.

Ronny


-- 
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Dapatkan FAQ milis dg mengirim email kosong ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3

Kirim email ke