2017-08-19 1 views
2

私はawkスクリプトを書いていますので、 コマンド名にawkを書き込まずに、スクリプト名を直接bashで実行できます。awkスクリプトを書くときに、入力ファイル名と追加の引数をどのように並べ替えることができますか?

入力ファイル名と追加の引数をコマンドラインで指定してスクリプトに渡すにはどうすればよいですか?

#! /usr/bin/awk -f                                         

または

#! /usr/bin/awk 

または全くシェバング:スクリプトは、シェバングとmyscript.awk開始を

を言うべきでしょうか?

myscript.awk inputfile arg1 arg2またはmyscript.awk arg1 arg2 inputfileのように実行できるように、コマンドライン引数を処理するスクリプトを書くにはどうすればよいですか?

awkのオプションを処理するにはどうすればよいですか(-F'\t'など)?

または、何か別の方法がありますか?

awkプログラムにawkを呼び出すbashスクリプトを書いて、間接的にやりますか?

おかげ

+0

'awk -f myscript.awk'ではなく、直接' myscript.awk'という名前をつけてください。 –

+0

拡張子 '.awk'のない' myscript'という名前ですか? – Tim

+0

はい、あります。ツールは、それらが書かれている言語ではなく、何をしているかに基づいて名前を付けるべきです。シェル(またはawkやpython、perl、rubyなど)で書かれた "foo"というツールがあり、 C言語では、作成されたツールの名前は "foo"にする必要があります。ユーザーPOVから目に見える違いはありません。したがって、「.awk」や「.sh」などの拡張子をツール名に追加しないでください。 –

答えて

2

は私が仕事の大半を行う、その後、すべてのパラメータでのawkを起動するためにはbashを使用することを好みます。そうすれば、bash組み込み関数やその他のものにフルアクセスできます。

あなたはこのような何かを行うことができます。

#!/bin/bash 

var1=$1 
var2=$2 
separator=$3 

awk -F "$separator" -v myvar1="$var1" -v myvar2="$var2" ' 
    BEGIN { 
     print myvar1, myvar2 
    } 
' 

二重引用符は、あなたのパラメータは、(多くのファイル名のように)スペースを含む場合は良いです。

+0

右。 AFAIKシェルスクリプトを起動してシェルとawkを別々に使う能力を奪うので、awkを呼び出すためにシェルスクリプトを起動するのは決して役に立ちません。最初の3つの代入の後に 'shift 3'を追加し、最後に' ''の後に '' $ @ "'を追加すると、awkはすべての未代入パラメータをファイル名として認識します: 'var1 = $ 1; var2 = $ 2; sep = $ 3;シフト3。 ... awk 'スクリプト' "$ @" '明らかに、[getopts](http://mywiki.wooledge.org/BashFAQ/035)の呼び出しを追加して、シェル部分の引数解析をより堅牢にすることができます。 –

関連する問題