AWKコマンド実行時に値を割り当てる方法

AWKコマンド実行時に値を割り当てる方法

フィールド値から改行を削除するには、次のコマンドを使用しています。このコマンド例は、3つの属性を持つファイルに対して生成されました。

awk -F\| '{while(NF<3 && getline p)$0=$0 p}1'

入力ファイルの属性数が異なるため、AWKコマンドで属性値の数をパラメータ化したいと思います。以下を試しましたが、エラーが発生しました。

NoAttributes=12
awk -F\| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'

エラー情報:

awk:フィールドが無効です。

行番号1を入力してください。

ソース行番号は 1 です。

答え1

awkコマンドラインで変数を設定するには-v variable=value

awk -v attrs=2 '{ ... NF < attrs && ... }'

ENVIRON["variable"]以下を使用して環境変数にアクセスすることもできますawk

export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'

または、

attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'

または、

env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'

最後の2つのバリエーションはattrs呼び出し環境に設定されておらず、awkプログラム(および起動できるすべてのプロセス)に対してのみ設定されます。

3番目のメソッドはvariable=value"filename"引数として提供されます。

awk '...' msg="hello" file1 file2 msg="good bye" file3 file4

ファイル処理を開始する前にawk変数を文字列に設定してくださいmsg。値が処理されるように変更されるまで値を保持します。このように設定された変数は、コードのどのブロックでも使用できません。hellofile1good byefile3BEGINawk

awkコードを構成する文字列の変数拡張を介してシェル変数をコードに直接挿入することは、awkデータをプログラムに転送する良い方法ではないため、避けるべきです。

関連情報