2017-01-21 7 views
2

例えば.confファイルや環境変数の中でawkのグローバルセパレータを設定することはできますか?グローバルAWKセパレータを設定することは可能です

カスタマイズされた区切り文字を使用するファイルが大量に処理されていますが、毎回手動でFSとOFSを設定するのは適切ではありません。

ありがとうございました。

答えて

4

いいえ、最高のあなたは、シェル変数をエクスポートしているいずれかを実行し、そのからFS、例えば設定することができます。

$ cat tst.awk 
BEGIN { FS=ENVIRON["AWK_FS"] } 
{ print NF } 

$ export AWK_FS="," 
$ echo 'a,b,c' | awk -f tst.awk 
3 

をまたはFS設定ファイルが含ま:

$ cat setFS.awk 
BEGIN{ FS="," } 

$ cat tst.awk 
@include "setFS.awk" 
{ print NF } 

$ echo 'a,b,c' | awk -f tst.awk 
3 

を」 @include "コンストラクトはgawk固有です。https://www.gnu.org/software/gawk/manual/gawk.html#Include-Filesを参照してください。そのファイルを含めるには、すべてのスクリプトに同じコードを入れなければなりませんが、少なくとも実際のFS設定(およびOFSなどの一般的なコード)は、そのインクルードファイルで1回のみ指定されます。

+1

私は '〜/ awk'ディレクトリに' default.awk'を含めた '@include'ソリューションを自分で使っています(普通の容疑者の文字頻度に基づいて自動的に' FS'を検出するコードがあります) )。 'AWKPATH =/home/user/awk'をエクスポートすることができます。 –

+0

'++'、私は実際にその日の可能性のあるコメントをコメントしていませんでした。間一髪! :D – Inian

+1

@JamesBrown '@include" setFS.awk "'は 'BEGIN {FS ="、 "}'よりも長いことに注意してください。 '@include'はGNU Awk特有のものです。 – Kaz

関連する問題