2011-08-30 19 views
23

Komut satırında gayet iyi çalışan bir komut kullanıyorum, ancak bir takma ad veya işlev içine koymaya çalıştığımda değil.BASH diğer adında veya işlevinde awk kullanma

$ awk '{print $1}' /tmp/textfile 
0 

Bu doğru, '0', "textfile" öğesinin 1 konumunda.

$ alias a="awk '{print $1}' /tmp/textfile" 
$ a 
1 0 136 94 

"textfile" içindeki satırın tamamı budur. Çalışabileceğimi hayal edebileceğim her türlü tırnak, parantez ve backtick'i denedim. Aynı problemi çok çeşitli formatlarda alabiliyorum.

Neyi anlamadım? takma yerine

tüm dosyayı yazdırır
awk '{print }' /tmp/textfile 

...

cevap

40

Sen $ şöyle kaçmak gerekir

myfunc(){ awk '{print $1}' file; } 
+1

AH-HA! Yaa! Teşekkürler! –

+6

Bu bölümlerde teşekkürler söyleyen protokol, doğru olanı işaretlemek (soldaki küçük onay işaretini tıklatarak). =) – Costa

+3

+1 Bu sorunun sahibi olsaydım, bunu memnuniyetle işaretleyebilirdim. Benim yaşadığım benzer bir sorunu çözdü. – K4GDW

11

kullanın bir işlevi:

alias a="awk '{print \$1}' /tmp/textfile" 

Aksi takdirde takma adıdır:

+0

Bu, argüman vektörünün referans alınmasına izin verdiği için kesinlikle daha esnek bir çözümdür. Örneğin, "$ {1: -hardcoded_filename}" 'işlevini kullanmak istediğinizde, isteğe bağlı bir dosya adının açık bir varsayılan değerle aktarılmasına izin vermeniz gerekir. Bu, burada çalışır ancak diğer ad yaklaşımında olmaz. –