2011-08-30 14 views
23

コマンドラインではうまく動作するコマンドがありますが、エイリアスまたは関数に入れようとしたときは動作しません。BASHエイリアスまたは関数でのawkの使用

「0」は「textfile」の位置1にあるので、正しいです。

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

これは "textfile"の行全体です。私は、私が想像することのできる引用符、括弧、およびバッククォートのあらゆる種類のものを試しました。私は多種多様なフォーマットで同じ問題を抱えることができます。

私は何を理解していませんか?

あなたがそうのような $をエスケープする必要が

答えて

40

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

そうでなければ、あなたの別名である:全体のファイルを印刷

awk '{print }' /tmp/textfile 

...

+1

AH-HA!ダー!ありがとう! –

+6

これらの部分で感謝の言葉をするプロトコルは、答えを正しいものとしてマークすることです(左の小さなチェックマークをクリックしてください)。 =) – Costa

+3

+1私がこの質問の所有者であった場合、私はこの質問に答えとして喜んで印をつけます。それは私が持っていた同様の問題を解決しました。 – K4GDW

11

ではなく、エイリアスの機能を使用します

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

引数ベクトルを参照できるため、これは確かに柔軟性の高いソリューションです。例えば、 '' $ {1:-hardcoded_filename} ''を使ってオプションのファイル名を明示的なデフォルトで渡せるようにするには、ここでは動作しますが、エイリアスのアプローチでは動作しません。 –

関連する問題