more input.txt
2.3 3.2 3.6
4.2 1.3 6.5
5.1 4.2 9.3
more output.txt
2.3 3.2 3.6
2.3 3.2 3.6
2.3 3.2 3.6
2.3 3.2 3.6
4.2 1.3 6.5
4.2 1.3 6.5
4.2 1.3 6.5
4.2 1.3 6.5
5.1 4.2 9.3
5.1 4.2 9.3
5.1 4.2 9.3
5.1 4.2 9.3
awk '{ for (i = 1; i <=4 ; i++) print }' input.txt > output.txt
Dengan Bourne Shell
#!/bin/sh
max=4
while read line
do
n=1
while [ $n -le $max ]
do
echo "$line"
n=$((n+1))
done
done < input.txt > output.txt
2. Mengulangi setiap baris sejumlah bilangan yang berada pada kolom pertama
more input.txt
3 2.3 3.2 3.6
2 4.2 1.3 6.5
5 5.1 4.2 9.3
Untuk contoh ini, baris pertama akan diulangi 3 kali, baris kedua 2 kali dan baris ketiga 5 kali.
more output.txt
3 2.3 3.2 3.6
3 2.3 3.2 3.6
3 2.3 3.2 3.6
2 4.2 1.3 6.5
2 4.2 1.3 6.5
5 5.1 4.2 9.3
5 5.1 4.2 9.3
5 5.1 4.2 9.3
5 5.1 4.2 9.3
5 5.1 4.2 9.3
Copy kode berikut lalu berinama apasaja.sh
#!/bin/sh
awk 'BEGIN{
}
{
for(i=0;i<$1;i++) print
}
END {
}' $1
Ubah permission dengan: chmod +x apasaja.sh (atau chmod 777 filename)
dengan ls -l :
sebelum chmod +x
-rw-r--r-- 1 agus agus 64 2011-10-06 05:23 apasaja.sh
setelah chmod +x
-rwxr-xr-x 1 agus agus 64 2011-10-06 05:23 apasaja.sh
Untuk menjalankan kode di atas:
sh apasaja.sh input.txt > output.txt
3. Membandingkan dua file dengan kolom pertama dan kolom kedua sebagai acuan. Baris dari file kedua di-outputkan jika kolom pertama dan kedua pada file1 sama dengan kolom pertama dan kedua pada file2.
more file1
-4.2 1.0 18.12 13.78 0.36 0.56 0.001
-3.8 9.0 24.02 18.91 0.41 0.48 0.001
-0.5 3.3 19.06 16.84 0.29 0.12 0.003
more file2
-3.8 9.0 -1.78172 11.3782 0.01 0.01 0.01 31704
-0.5 3.3 -1.83964 11.2841 0.01 0.01 0.01 31701
-2.3 3.6 -1.82152 11.3152 0.01 0.01 0.01 31702
-7.2 1.0 -1.80205 11.3466 0.01 0.01 0.01 31703
-2.0 3.6 -1.76099 11.4199 0.01 0.01 0.01 31705
29.9 3.2 -1.74029 11.4417 0.01 0.01 0.01 31706
more output.txt
-3.8 9.0 -1.78172 11.3782 0.01 0.01 0.01 31704
-0.5 3.3 -1.83964 11.2841 0.01 0.01 0.01 31701
awk 'FNR==NR{A[$1,$2]=1;next} A[$1,$2]' file1 file2 > output.txt
4. Memilih elemen dan menjadikannya sebagai variabel.
more input.txt
3 2.3 3.2 3.6
2 4.2 1.3 6.5
5 5.1 4.2 9.3
Copy kode berikut lalu berinama kode.sh
#!/bin/sh
angka=`awk 'FNR == 2 {print $3}' < input.txt`
echo elemen tersebut adalah: $angka
kali=`echo "$angka * 2.0" | bc -l`
echo elemen tersebut dikali 2 = $kali
sh kode.sh
elemen tersebut adalah: 1.3
elemen tersebut dikali 2 = 2.60
Perhatikan bahwa simbol acute (`) mengapit semua perintah yang mengoutputkan variabel.
Perintah bc -l di atas digunakan untuk memanggil basic calculator (bc) dengan menggunakan long precision (-l).
Anda dapat mencoba mengetikkan bc -l pada terminal linux untuk menjadikannya sebagai kalkulator.
5. Menggabungkan beberapa proses, contoh berikut adalah memilih baris ganjil lalu mengkalikannya dengan 0.001
awk 'NR%2 ' input.txt | awk '{for(i=1;i <=NF;++i)$i*=0.001;print}' > output.txt
more input.txt
3 2.3 3.2 3.6
2 4.2 1.3 6.5
5 5.1 4.2 9.3
more output.txt
0.003 0.0023 0.0032 0.0036
0.005 0.0051 0.0042 0.0093
6. Berbagai perintah Unix yang berguna untuk Geoscientist
more input.txt
3 2.3 3.2 3.6
2 4.2 1.3 6.5
5 5.1 4.2 9.3
menampilkan 2 baris pertama dari sebuah file: head -2 input.txt
3 2.3 3.2 3.6
2 4.2 1.3 6.5
menampilkan 2 baris terakhir dari sebuah file: tail -2 input.txt
2 4.2 1.3 6.5
5 5.1 4.2 9.3
7. ps -ef | grep agus menampilkan semua proses lalu menseleksinya yang mengandung nama agus
agus 1959 1 0 04:39 ? 00:00:17 mono /us
agus 1969 1874 2 04:41 pts/1 00:03:15 gedit program1.sh
agus 3999 1874 0 07:11 pts/1 00:00:00 ps -ef
Lalu saya ingin meng-kill program gedit: kill -9 1969
8. Untuk melihat aktifitas cpu: top
Perintah top cukup penting untuk memonitor proses berat seperti migrasi data seismik
agus@agus-Satellite-M305:~/programming$ top
Swap: 6416380k total, 0k used, 6416380k free, 634416k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1862 agus 20 0 246m 56m 22m S 16 1.5 18:44.44 plugin-containe
994 root 20 0 83804 38m 15m S 13 1.0 12:14.39 Xorg
1625 agus 20 0 91760 14m 10m S 9 0.4 0:43.72 gnome-terminal
1402 agus 20 0 157m 5680 4472 S 8 0.1 5:26.83 pulseaudio
plugin-containe memakan 16% dari CPU
9. mengurutkan file dari yang paling kecil sampai besar: ls -alSr -h
10. Mengecek kapasitas hard disk df -k -h .
agus@agus-Satellite-M305:~/programming$ df -k -h .
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 56G 13G 40G 24
11. Menghitung jumlah baris dalam sebuah file: wc -l filename
12. Melihat isi file: more filename
13. Left(-) and Right(+) Justify
head file
A 1 1 0.32
AB 123 123 -0.122
ABC 1234 1234 0.12
AB 1234 1234 3.12
A 12 12 131.11
Q 3 1 34.1211
awk '{printf "%-3s %-4d %5d %6.2f\n ",$1,$2,$3,$4}' file | awk '{ sub(/^[ \t]+/, ""); print }'
A 1 1 0.32
AB 123 123 -0.12
ABC 1234 1234 0.12
AB 1234 1234 3.12
A 12 12 131.11
Q 3 1 34.12
Col1: left, allocate 3 digits skip 1 digit to the next col
Col2: left, allocate 4 digits skip 1 digit to the next col
Col3: right, allocate 5 digits skip 2 digits to the next col
col4: right, allocate 6 digits with 2 precission
awk '{ sub(/^[ \t]+/, ""); print }' remove unwanted space
14. Mengulang nilai-nilai dalam baris beberapa kali sesuai angka pada kolom 2
copy perintah berikut lalu beri nama ulang.sh
Jalankan dengan perintah
15. Menghilangkan space pada kolom
16. Mengganti kata foo dengan bar pada sebuah file
17. Mengambil semua nilai yang berada pada kolom ke 3 dari file2 berdasarkan kesamaan pada kolom 1 dari file1 dan file2
18. Sorting dan mengoutputkan yang uniq
19.Compare two files based on col 1 print match and non-match
head file1
514151 utr5 0 +
512281 utr5 0 +
512281 utr5 0 +
512281 utr5 0 +
head file2
514151 utr5 0 +
512281 utr5 0 +
512288 utr5 0 +
512289 utr5 0 +
awk 'NR==FNR{a[$1]=$1;next}!a[$1]' file1 file2
512288 utr5 0 +
512289 utr5 0 +
awk 'NR==FNR{a[$1]=$1;next}a[$1]' file1 file2
514151 utr5 0 +
512281 utr5 0 +
No comments:
Post a Comment