Programın ekrana çıktısı varsa bu bir dosyaya yönlendirilebilir. Program klavyeden giriş alıyorsa bunlar bir dosyaya yazılıarak programa yönlendirilebilir.
Bir programin ekrana (stdout) verecegi cikislarin dosyaya yonlenmesini saglar. Onceden var olan dosya silinir:
prg > cikis_dosyasi
Onceden var olan dosyaya ilave yapilir.
prg >> cikis_dosyasi
klavyeden (stdin) deger okumasi gereken bir programa dosyadaki degerlerin yonlendirilmesini saglar.
prg < giris_dosyasi
giris verilerinin islenerek cikisa yazilmasi
prg < giris > cikis
Belirli bir kelimeye kadar (orn END) aradaki satirlari veri olarak programa yonlendirir.
prg <<END> cikis
. . .
END
Bu işlemler boru "|" ile eş zamanlı yapılabilir:
prg | prg | prg | ... | prg
grep ... | awk ... | wc ... > cikis.txt
; Komutlarin ayni satirda yazilmasi icin aralarina konur.
: Dosya/Degisken yol/isimlerinde modifikasyon yapar
:t dosya yolunu silerek sadece adini verir set a = ` pwd ` ; echo $a:t
:h dosya yolunu verir. set a = ` pwd ` ; echo $a:h
:u ilk kucuk harfi, buyuk yapar
:l ilk buyuk harfi kucuk harf yapar
:al :au kucuk/buyuk harf islemini tum kelimelere uygular
set : Degisken atamasi yapar
set a = 123
set a = (123 456) dizi->> $a[1] $a[2]
$ : Degisken tanimlamasi
set b = $a ( a degiskeni b'ye atanir)
$< : Bir degisken icin disaridan deger girisi saglar
set a = $<
@ : Cok temel/basit matematik islemleri yapar (ondalikli sayilar kullanamaz)
@ a = 1 + 1
@ a = $b * 3
@ a = 1 + 1 >>> hata verir
@ a++ a--
echo : Ekrana yazi/deger yazilmasini saglar
\n yeni satir \t tab \a beep
goto : Tanimli bir satira gitmeyi saglar
goto ATLA (ileriki bir satirda ATLA: seklinde tanimlama olmalidir )
exit : Kabuktan cikmayi saglar.
` ` : Komut icinde diger program/komut calistirilmasini saglar
set a = ` echo "12" `
if : Sartlarin duzenlenmesini saglar.
if ( $a == 1 ) then
echo $a
endif
== Esit > Buyuk < Kucuk
>= <= Buyuk/Kucuk esit
&& ve || veya
Dosya kontrollerinde kullanilan bazi ozel ifadeler ( ! negatif anlamindadir )
r Read access
w Write access
x Execute access
e Existence
z Zero size
s Non-zero size (+)
f Plain file
d Directory
l Symbolic link (+) *
if ( ! -e a.txt ) echo " a.txt mevcut degil."
switch : If yapisinin basitlestirilmis seklidir.
switch xyz {
a {
...
}
b {
...
}
c {
...
}
default {
...
}
}
while : Verilen matematiksel tanimlama dogru oldugu surece belirli
islemlerin yapilmasi icin kullanilir.
set i = 0
while { $i < 10 } {
...
@ i++
}
incr : Degiskenin degerini arttirir.
incr i -> 1 arttirma ( i++ )
incr i 10 -> 10 arttirma ( i=i+10 )
clear : Ekrani temizler
$1 veya $argv[1] : Scripte disaridan komut satirindan verilen parametreleri belirtir
$2 veya $argv[2]
foreach : Verilen bir dosya grubunu veya dizinin elemanlarini
sirayla islenmesini saglar
foreach dosya ( *.dat )
echo $dosya
end
Veri düzenlemede kullanılabilecek bazı linux komutları:
cat : Dosya icerigini ekrana döker
cat a.txt
Özellikle ascii dosyaları birleştirmek için kullanılır.
cat a.txt b.txt > c.txt
grep: Istenilen karakter dizisini dosyada arar
grep -e "abc" a.txt
taranacak kelime birebir aranacak ise -x kullanılmalı.
* Çoklu kelime tarama :
grep 'OBJECTID\|CLOSED\|DESCR\|KML_F\|Shape\|TUR\|Simge'
* Satır sonu tarama : (satır sonu işareti yerine boşluk. sonrasında -999 yerine satır sonu koymak)
sed -z 's/\n/ /g;s/-999/\n/g'
cut : Istenilen bir karakteri baz alarak dosya/degisken satirini parcalar
cut -f2 a.txt
set i = "1.2. 3 .4"
echo $i | cut -d"." -f3
paste : Iki veya daha fazla dosyayayi yan yana yapistirir.
paste a.txt b.txt > c.txt
sort : Siralama yapar
sort a.txt
wc : Dosya icinde satir/karakter/kelime sayilarini verir
wc -l a.txt
date : Tarih ve zaman bilgisini istenilen formatta verir
date +"%H:%M:%S"
colrm : Istenilen kolonlari siler
colrm 3 5 < a.txt
nl : Satirlari numaralandirir.
nl a.txt
sleep : Belirli bir saniye beklme yapar.
sleep 60
split : Dosyayi istenilen satir vb. icin parcalara boler
split -l 50 a.txt X
sed : Dosya icindeki karakterler uzerinde toplu edit islemi yapar
sed -e 's/\./,/g' a.txt > b.txt
Dosyanın 2 ve 100. satırlar arasını almak
sed -n 2,100p dosya.txt
more : Dosya icerigini istenilen kurallara gore ekrana doker
more +6 a.txt ilk 6 satir gosterilmez
head : Istenilen miktardaki dosyanin ilk satirlarini ekrana doker
head -6 a.txt ilk 6 satir gosterilir
tail : Istenilen miktardaki dosyanin son satirlarini ekrana doker
tail -6 a.txt son 6 satir gosterilir
dos2unix: ASCII dos formatini unix formatina donusturur
unix2dos: ASCII unix formatini dos formatina donusturur
dos2unix a.txt
diff : Iki dosyanin satirlarini karsilastirir
diff a.txt b.txt
C tabanlı bir program olan awk basitleştirilmiş bir programla dili olarak görülebilir. Komut satırından veya script içinde çalışabilir. Burada çok temel bir kaç özelliği verilecektir. Daha fazla bilgiyi GNU sayfasından yada Google'da tarayarak öğrenebilirsiniz.
Elimizde örnek olarak a.dat şeklinde bir dosya olsun. Dosyanın ilk satırında başlıklar diğer 3 satırında ise veri bulunmaktadır.
a.dat :
nokta X Y Z
A 1 2 3
B 2 4 1
C 3 5 2
Bu dosyayı awk kullanarak düzenleyelim.
Sadece X Y Z kolonlarını almak: $ ile kolon numarası belirtilir. virgül kullanılmaz ise kolonlardaki değerler birbirlerine yapışırlar.
awk '{ print $2,$3,$4}' a.dat
Eğer ilk satır (başlıklar) istenmiyorsa: NR (Number of Record) satır sayısını kontrol eder.
awk ' NR>1 { print $2,$3,$4}' a.dat
İlk kolonu sona atarak:
awk ' NR>1 { print $2,$3,$4,$1}' a.dat
Matematik işlem (birçok matematik işlemi yapılabilir):
awk ' { print $2/1.2 , ($3+5.4)/2 , $4*$4 , $1}' a.dat
Tek satırlı basit awk yazım şekli :
awk ' { ... komutlar ... } ' giris_dosyasi
Özel awk değişkenleri:
NR : kayit sayisi
NF : kolon sayisi
FS : Giris kolon bolumleme karakteri (bosluk)
OFS : Cikis kolon bolumleme karakteri (bosluk)
ORS : Cikis kayit bolumleme karakteri (enter)
$1,$2 : kolonlar
"giris_dosyasi" icin ornek satir:
A 1 B 2
A 1 1 3
C 4 D 5
Veri dosyasındaki 1. kolondaki degerlerin yazılması:
awk ' { print $1 } ' giris_dosyasi
A
A
C
Veri dosyasindaki 1. ve 2. kolondaki degerleri yazar, aralarinda 1 bosluk vardir
awk ' { print $1 , $2 } ' giris_dosyasi
A 1
A 1
C 4
-v ile disaridan deger alinabilir
set z = 3
set k = 2
awk -v Z=$z -v K=$k ' { print $2*Z , K $1 } ' giris_dosyasi
3 2A
3 2A
12 2C
Formatlı sayı yazımı:
awk ' { printf "%5.2f" , $2/4 } ' giris_dosyasi
0.25 d,i: tam sayi
0.25 f: ondalikli sayi
1.00 s: karakter
g: ustel
Bir çok dosyanın kolonlarının birleştirilip atlamalı kolon seçimi:
2'şer artan kolon numarası ile kolonları yanyana yazma
paste tmp[123] | awk ' { for (i=2;i<=NF; i=i+2) printf "%f ", $i; print "" } ' > sil
2'şer artan kolon numaralari ile bu konlarin ortalamasini alma (veri sayisi toplam kolonsayisinin yarisi) cikisin ilk degeri tum satirlarin basinda bulunan 1. kolondaki deger (ornegin periyot)
bu giris dosyasinda kolonlar periyot-deger seklinde oldudundan tek sayili kolonlar ayni periyot degerlerinden olusur, cift sayili kolonlar genliklerdir:
paste tmp[123] | awk ' { top=0; printf " %f ",$1 ; for (i=2;i<=NF; i=i+2) top = top+$i ; print top/(NF/2) } ' > sil
Logaritmik eksen çiziminde hata aralığı (STDEV*(1/LN(10)) = STDEV*0.434 ) :
echo $r $mean $std | awk ' { print $1, $2, $3*0.434 } '