Re: [linux-programming] help bash script 2

2010-01-10 Terurut Topik Eko Prasetya
Budy,

Mungkin opini ini benar untuk 5 atau 10 tahun yang lalu, tapi jika
kita melihat embedded systems sekarang, sudah makin jarang kita
temukan system yang tidak mampu menjalankan high-level language.



KOkon.

2010/1/8 Budy Wuysang nguik.gn...@gmail.com:
 2010/1/9 Eko Prasetya eprase...@gmail.com:
 Di real world, kita menggunakan python atau high-level language lainnya :D

 Tentu saja dengan syarat system yg digunakan sanggup
 dan punya resource untuk python  language lainnya.

 Kalau sudah masuk ke system embedded atau small
 memory system maka sangat kecil kemungkinan anda
 punya akses ke higher level language,
 contoh: busybox routers, nokia n810, dll

-- 
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis



Re: [linux-programming] help bash script 2

2010-01-08 Terurut Topik Budy Wuysang
2010/1/6 Yohanes Nugroho yoha...@gmail.com:
---pemaparan lengkap dipotong---
 Jadi isi file 1.txt itu adalah 2008-01-12? lalu mau rename 1.xls ke
 2008-01-12?

 misalnya X adalah nama file (1.txt):

 bash$ X=1.txt
 bash$ mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

 $(xxx) gunanya mengeksekusi perintah x, misalnya jika isi file 1.txt
 adalah hello.doc:

 cat $(cat 1.txt)

 pertama $(cat 1.txt) akan dieksekusi, hasilnya adalah hello.doc

 berikutnya:

 cat hello.doc

 akan dieksekusi


 Jadi perintah

 mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

 bisa dipecah jadi 3:
 - perintah mv itu sendiri diikuti 2 parameter
 - perintah $(echo $X|sed -e 's/.txt/.xls/')
 - perintah $(cat $X|sed -e 's/$/.xls/')

 Tapi pertama saya mengeset Xmenjadi 1.txt dengan

 X=1.txt

 perintah mv sudah jelas. Berikutnya kita lihat yang di dalam $(...) yang 
 pertama

 echo $X|sed -e 's/.txt/.xls/'

 artinya filter X dengan sed. Perintah sed yang paling sederhana adalah
 untuk mereplace. Karena namanya .txt, kita mau ubah menjadi 1.xls.

 Anda bisa mencoba2 sendiri, misalnya:

 echo ABC | sed -e 's/A/X/'
 hasilnya jadi XBC

Kalau tujuannya memang memberi contoh dalam konteks penggunaan
sed untuk substitusi ini adalah penjelasan yg ok.

Sedikit koreksi untuk menggunakan regex untuk suffix substitution
perlu menambahkan '\' sebelum '.' karena '.' berarti any single character

echo $X | sed -e 's/\.txt/xls/'

Kalau tidak menggunakan '\'
maka nama file fooXtxt akan menjadi foo.xls

Dalam real world scripting kadang perlu dioptimalkan juga,
dalam hal ini bash punya builtin parameter expansion 
kalau untuk bashv2 (or later) ada $( file) pengganti $(cat file)

X=1
mv ${X%.txt}.xls $($X).xls

-- 
Berrylink™ - Makassar
one stop BlackBerry® solution
@Karebosi Link Blok J-66

--
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis



Re: [linux-programming] help bash script 2

2010-01-08 Terurut Topik Eko Prasetya
Di real world, kita menggunakan python atau high-level language lainnya :D


Eko.

2010/1/8 Budy Wuysang nguik.gn...@gmail.com:

 Dalam real world scripting kadang perlu dioptimalkan juga,
 dalam hal ini bash punya builtin parameter expansion 
 kalau untuk bashv2 (or later) ada $( file) pengganti $(cat file)


-- 
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis



Re: [linux-programming] help bash script 2

2010-01-08 Terurut Topik Budy Wuysang
2010/1/9 Eko Prasetya eprase...@gmail.com:
 Di real world, kita menggunakan python atau high-level language lainnya :D

Tentu saja dengan syarat system yg digunakan sanggup
dan punya resource untuk python  language lainnya.

Kalau sudah masuk ke system embedded atau small
memory system maka sangat kecil kemungkinan anda
punya akses ke higher level language,
contoh: busybox routers, nokia n810, dll

-- 
Berrylink™ - Makassar
one stop BlackBerry® solution
@Karebosi Link Blok J-66

--
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis



Re: [linux-programming] help bash script 2

2010-01-06 Terurut Topik Yohanes Nugroho
2010/1/6 gdeys...@gmail.com gdeys...@gmail.com:

 Sip, dah aku coba, agak bingung sih... klo kira2 bentuknya kek gini :
 date - 2003-10-12T02:12:45Z
 Bisa gak klo potongnya dengan cara 7 digit pertama (date - = 7digit)
 kemudian diambil pada digit ke 8-17 (2003-10-12 = digit ke 8-17) kemudian
 digit ke 18 sampe terakhir dihapus.
 Digit disini bisa diartikan sebagai Karakter

kalau ingin memotong karakter ke x sampai ke y bisa pakai cut, misalnya:

echo 'date - 2003-10-12T02:12:45Z' | cut -c 8-17
hasilnya: 2003-10-12


 Metode -f 3- itu artinya memotong pada karakter pertama berupa 3 pada 2003
 hal ini gak masalah klo bash script dijalankan pada single command, nantinya
 saya mo melakukan banyak command, jd saya gak bisa menggunakan cara ini.
 dan
 -f 1 -d: adalah memotong karakter setelah :
 /cmiiw

bukan, cut itu bisa bekerja di beberapa mode. Mode yang penting:
- cut dari karakter ke x - y (ini harusnya dah jelas)
- cut field  ke x-y.

Dalam contoh

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

Artinya, potong masukan di karakter spasi (-d' ' artinya pemisahnya
adalah spasi). Waktu dipotong, hasilnya adalah:

date
-
2003-10-12-10:14pm

Kita cuma ingin yang terakir saja (baris ke 3, dst) jadi kita pakai -f
3, hasilnya:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '

2003-10-12-10:14pm

Berikutnya kita mau membuang dari titk dua ke kanan, jadi sekarang
kita pakai pemisah/delimiter ':'. Kali ini hasilnya dala


2003-10-12-10
14pm

Karena kita hanya ingin yang pertama, maka kita perlu cut lagi:

echo '2003-10-12-10:14pm' | cut -f 1 -d':'

Sehingga jika digabung:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

Lalu masalah perintah, saya cuma memberi contoh untuk satu kasus jadi
pakai echi. Kalau Anda punya file yang isinya semuanya baris tanggal
ya tinggal diganti memakai cat.

misalnya

cat file | cut -c 8-18

hasilnya akan ke layar, atau

cat file | cut -c 8-18  file.txt

Untuk belajar bash, cobalah menjalankan perintah sepotong2 untuk
melihat hasilnya.


 Bisa dengan sed

 echo 'date - 2003-10-12-10:14pm' | sed -re 's/[^0-9]+([0-9\-]+).*/\1/g'

 Ini lebih reliable, misalnya ada spasi ekstra, masih bisa jalan. Ini
 bekerja dengan mengabaikan semua yang bukan digit di awal ([^0-9]+),
 lalu mengambil semua digit dan tanda - ([0-9\-]+) dan mengabaikan
 sisanya (.*).


 Whuah.. yg ini malah bikin saya tambah bingung :d
 dari man sed mengatakan : 'stream editor for filtering and transforming
 text'

 Whuah keknya bisa tuh tapi masih bingung jugak (doh)

Iya ini memang lebih kompleks dengan regex

 gimana cara merename sebuah file dengan menggunakan output dari sebuah
 command


 Ini kurang jelas, bisa diperjelas maksud pertanyaannya?



 misal kek gini :
 less 1.txt
 2008-01-12   output
 trus output diatas digunakan untuk
 ren 1.xls 2008-01-12.xls
 artinya :
 ren 1.xls [output]

 dan command2 diatas dibuat dalam satu script atau satu baris command

Jadi isi file 1.txt itu adalah 2008-01-12? lalu mau rename 1.xls ke
2008-01-12?

misalnya X adalah nama file (1.txt):


bash$ X=1.txt
bash$ mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')


$(xxx) gunanya mengeksekusi perintah x, misalnya jika isi file 1.txt
adalah hello.doc:

cat $(cat 1.txt)

pertama $(cat 1.txt) akan dieksekusi, hasilnya adalah hello.doc

berikutnya:

cat hello.doc

akan dieksekusi


Jadi perintah

mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

bisa dipecah jadi 3:
- perintah mv itu sendiri diikuti 2 parameter
- perintah $(echo $X|sed -e 's/.txt/.xls/')
- perintah $(cat $X|sed -e 's/$/.xls/')

Tapi pertama saya mengeset Xmenjadi 1.txt dengan

X=1.txt

perintah mv sudah jelas. Berikutnya kita lihat yang di dalam $(...) yang pertama

echo $X|sed -e 's/.txt/.xls/'

artinya filter X dengan sed. Perintah sed yang paling sederhana adalah
untuk mereplace. Karena namanya .txt, kita mau ubah menjadi 1.xls.

Anda bisa mencoba2 sendiri, misalnya:

echo ABC | sed -e 's/A/X/'
hasilnya jadi XBC

Anda juga bisa memakai file:

cat fileku | sed -e 's/A/X/'

Jika ingin mengganti semua A bukan A pertama, tambahkan g (global)

cat fileku | sed -e 's/A/X/g'

Berikutnya:

cat $X|sed -e 's/$/.xls/'

tadi kita pakai echo, tapi sekarang kita pake cat karena ingin isi file 1.txt

cat 1.txt|sed -e 's/$/.xls/'

$ adalah akhir baris kita mau mengubah akhir baris menjadi .xls
(menambah .xls di belakang).

Jadi perintahnya menjadi:

mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

Kalau Anda punya banyak file text di satu direktori:

for X in *.txt; do mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed
-e 's/$/.xls/'); done

Kali ini saya bahas dengan detail karena lagi pengen aja :), tapi
mohon Anda belajar dulu perintah2 dasar seperti sed, for, cat, dsb.
Supaya lebih mudah, dan saya tidak perlu menjelaskan panjang lebar.

Beberapa perintah dasar:
cat
head
tail
cut
grep
sed

Pelajari juga karakter2 spesial, seperti $(), lalu pelajari loop (for,
while, dsb)

Di google banyak 

Re: [linux-programming] help bash script 2

2010-01-06 Terurut Topik gdeys...@gmail.com

Yohanes Nugroho wrote, On 1/6/2010 3:39 PM:

2010/1/6 gdeys...@gmail.com gdeys...@gmail.com:
  

Sip, dah aku coba, agak bingung sih... klo kira2 bentuknya kek gini :
date - 2003-10-12T02:12:45Z
Bisa gak klo potongnya dengan cara 7 digit pertama (date - = 7digit)
kemudian diambil pada digit ke 8-17 (2003-10-12 = digit ke 8-17) kemudian
digit ke 18 sampe terakhir dihapus.
Digit disini bisa diartikan sebagai Karakter



kalau ingin memotong karakter ke x sampai ke y bisa pakai cut, misalnya:

echo 'date - 2003-10-12T02:12:45Z' | cut -c 8-17
hasilnya: 2003-10-12


  

Metode -f 3- itu artinya memotong pada karakter pertama berupa 3 pada 2003
hal ini gak masalah klo bash script dijalankan pada single command, nantinya
saya mo melakukan banyak command, jd saya gak bisa menggunakan cara ini.
dan
-f 1 -d: adalah memotong karakter setelah :
/cmiiw



bukan, cut itu bisa bekerja di beberapa mode. Mode yang penting:
- cut dari karakter ke x - y (ini harusnya dah jelas)
- cut field  ke x-y.

Dalam contoh

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

Artinya, potong masukan di karakter spasi (-d' ' artinya pemisahnya
adalah spasi). Waktu dipotong, hasilnya adalah:

date
-
2003-10-12-10:14pm

Kita cuma ingin yang terakir saja (baris ke 3, dst) jadi kita pakai -f
3, hasilnya:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '

2003-10-12-10:14pm

Berikutnya kita mau membuang dari titk dua ke kanan, jadi sekarang
kita pakai pemisah/delimiter ':'. Kali ini hasilnya dala


2003-10-12-10
14pm

Karena kita hanya ingin yang pertama, maka kita perlu cut lagi:

echo '2003-10-12-10:14pm' | cut -f 1 -d':'

Sehingga jika digabung:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

Lalu masalah perintah, saya cuma memberi contoh untuk satu kasus jadi
pakai echi. Kalau Anda punya file yang isinya semuanya baris tanggal
ya tinggal diganti memakai cat.

misalnya

cat file | cut -c 8-18

hasilnya akan ke layar, atau

cat file | cut -c 8-18  file.txt

Untuk belajar bash, cobalah menjalankan perintah sepotong2 untuk
melihat hasilnya.

  

Bisa dengan sed

echo 'date - 2003-10-12-10:14pm' | sed -re 's/[^0-9]+([0-9\-]+).*/\1/g'

Ini lebih reliable, misalnya ada spasi ekstra, masih bisa jalan. Ini
bekerja dengan mengabaikan semua yang bukan digit di awal ([^0-9]+),
lalu mengambil semua digit dan tanda - ([0-9\-]+) dan mengabaikan
sisanya (.*).

  

Whuah.. yg ini malah bikin saya tambah bingung :d
dari man sed mengatakan : 'stream editor for filtering and transforming
text'

Whuah keknya bisa tuh tapi masih bingung jugak (doh)



Iya ini memang lebih kompleks dengan regex

  

gimana cara merename sebuah file dengan menggunakan output dari sebuah
command



Ini kurang jelas, bisa diperjelas maksud pertanyaannya?


  

misal kek gini :
less 1.txt
2008-01-12   output
trus output diatas digunakan untuk
ren 1.xls 2008-01-12.xls
artinya :
ren 1.xls [output]

dan command2 diatas dibuat dalam satu script atau satu baris command



Jadi isi file 1.txt itu adalah 2008-01-12? lalu mau rename 1.xls ke
2008-01-12?

misalnya X adalah nama file (1.txt):


bash$ X=1.txt
bash$ mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')


$(xxx) gunanya mengeksekusi perintah x, misalnya jika isi file 1.txt
adalah hello.doc:

cat $(cat 1.txt)

pertama $(cat 1.txt) akan dieksekusi, hasilnya adalah hello.doc

berikutnya:

cat hello.doc

akan dieksekusi


Jadi perintah

mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

bisa dipecah jadi 3:
- perintah mv itu sendiri diikuti 2 parameter
- perintah $(echo $X|sed -e 's/.txt/.xls/')
- perintah $(cat $X|sed -e 's/$/.xls/')

Tapi pertama saya mengeset Xmenjadi 1.txt dengan

X=1.txt

perintah mv sudah jelas. Berikutnya kita lihat yang di dalam $(...) yang pertama

echo $X|sed -e 's/.txt/.xls/'

artinya filter X dengan sed. Perintah sed yang paling sederhana adalah
untuk mereplace. Karena namanya .txt, kita mau ubah menjadi 1.xls.

Anda bisa mencoba2 sendiri, misalnya:

echo ABC | sed -e 's/A/X/'
hasilnya jadi XBC

Anda juga bisa memakai file:

cat fileku | sed -e 's/A/X/'

Jika ingin mengganti semua A bukan A pertama, tambahkan g (global)

cat fileku | sed -e 's/A/X/g'

Berikutnya:

cat $X|sed -e 's/$/.xls/'

tadi kita pakai echo, tapi sekarang kita pake cat karena ingin isi file 1.txt

cat 1.txt|sed -e 's/$/.xls/'

$ adalah akhir baris kita mau mengubah akhir baris menjadi .xls
(menambah .xls di belakang).

Jadi perintahnya menjadi:

mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed -e 's/$/.xls/')

Kalau Anda punya banyak file text di satu direktori:

for X in *.txt; do mv $(echo $X|sed -e 's/.txt/.xls/') $(cat $X|sed
-e 's/$/.xls/'); done

Kali ini saya bahas dengan detail karena lagi pengen aja :), tapi
mohon Anda belajar dulu perintah2 dasar seperti sed, for, cat, dsb.
Supaya lebih mudah, dan saya tidak perlu menjelaskan panjang lebar.

Beberapa perintah dasar:
cat
head
tail
cut
grep
sed

Pelajari juga karakter2 

Re: [linux-programming] help bash script 2

2010-01-05 Terurut Topik Yohanes Nugroho
2010/1/6 gdeys...@gmail.com gdeys...@gmail.com:
 melanjutkan help bash script sebelumnya, saya mohon bimbingannya untuk
 dapat membuat bash prog yg secara bertahap sedang saya bikin.

 (1)
 aku ada file hasil bernama 1d dari less 1.txt | grep date  1d
 isi file 1d ini adalah :

 date - 2003-10-12-10:14pm

 Kemudian aku mo rubah file 1d menjadi hanya 2003-10-12-10 saja. Itu artinya
 akan menghapus [date - ] dan [:14pm]

 Kira2 pake apa yach ?

bisa dicut, misalnya:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

cut pertama memotong dari spasi ke kanan, cut kedua memotong sebelum tanda :

Bisa dengan sed

echo 'date - 2003-10-12-10:14pm' | sed -re 's/[^0-9]+([0-9\-]+).*/\1/g'

Ini lebih reliable, misalnya ada spasi ekstra, masih bisa jalan. Ini
bekerja dengan mengabaikan semua yang bukan digit di awal ([^0-9]+),
lalu mengambil semua digit dan tanda - ([0-9\-]+) dan mengabaikan
sisanya (.*).

 (2)
 gimana cara merename sebuah file dengan menggunakan output dari sebuah
 command

Ini kurang jelas, bisa diperjelas maksud pertanyaannya?

-- 
Regards
Yohanes
http://yohan.es/

-- 
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis



Re: [linux-programming] help bash script 2

2010-01-05 Terurut Topik gdeys...@gmail.com

Yohanes Nugroho wrote, On 1/6/2010 11:37 AM:

2010/1/6 gdeys...@gmail.com gdeys...@gmail.com:
  

melanjutkan help bash script sebelumnya, saya mohon bimbingannya untuk
dapat membuat bash prog yg secara bertahap sedang saya bikin.

(1)
aku ada file hasil bernama 1d dari less 1.txt | grep date  1d
isi file 1d ini adalah :

date - 2003-10-12-10:14pm

Kemudian aku mo rubah file 1d menjadi hanya 2003-10-12-10 saja. Itu artinya
akan menghapus [date - ] dan [:14pm]

Kira2 pake apa yach ?



bisa dicut, misalnya:

echo 'date - 2003-10-12-10:14pm' | cut -f 3- -d' '| cut -f 1 -d:

cut pertama memotong dari spasi ke kanan, cut kedua memotong sebelum tanda :

  

Sip, dah aku coba, agak bingung sih... klo kira2 bentuknya kek gini :
date - 2003-10-12T02:12:45Z
Bisa gak klo potongnya dengan cara 7 digit pertama (date - = 7digit) 
kemudian diambil pada digit ke 8-17 (2003-10-12 = digit ke 8-17) 
kemudian digit ke 18 sampe terakhir dihapus.

Digit disini bisa diartikan sebagai Karakter

cmiiw
Metode -f 3- itu artinya memotong pada karakter pertama berupa 3 pada 2003
hal ini gak masalah klo bash script dijalankan pada single command, 
nantinya saya mo melakukan banyak command, jd saya gak bisa menggunakan 
cara ini.

dan
-f 1 -d: adalah memotong karakter setelah :
/cmiiw


Bisa dengan sed

echo 'date - 2003-10-12-10:14pm' | sed -re 's/[^0-9]+([0-9\-]+).*/\1/g'

Ini lebih reliable, misalnya ada spasi ekstra, masih bisa jalan. Ini
bekerja dengan mengabaikan semua yang bukan digit di awal ([^0-9]+),
lalu mengambil semua digit dan tanda - ([0-9\-]+) dan mengabaikan
sisanya (.*).
  

Whuah.. yg ini malah bikin saya tambah bingung :d
dari man sed mengatakan : 'stream editor for filtering and transforming 
text'


Whuah keknya bisa tuh tapi masih bingung jugak (doh)
  

(2)
gimana cara merename sebuah file dengan menggunakan output dari sebuah
command



Ini kurang jelas, bisa diperjelas maksud pertanyaannya?

  

misal kek gini :
less 1.txt
2008-01-12   output
trus output diatas digunakan untuk
ren 1.xls 2008-01-12.xls
artinya :
ren 1.xls [output]

dan command2 diatas dibuat dalam satu script atau satu baris command

--
Berhenti langganan: linux-programming-unsubscr...@linux.or.id
Arsip dan info: http://linux.or.id/milis