タブ区切りファイルを処理するために、cygwinで一時的なawkコマンドを作成しています。ほとんどすべてのコマンドは次から始まります。
BEGIN {FS="\t";OFS="\t";ORS="\r\n";}
毎回入力したくない場合は、これらの区切り文字をデフォルト値に設定するにはどうすればよいですか?
答え1
~/.bashrc
おそらく最も簡単な方法はシェルエイリアスを使用することです(シェルまたはそれに対応する項目に追加)。
alias awktab="awk -v FS='\t' -v OFS='\t' -v ORS='\t'"
答え2
ショートカットを追加することもできます。たとえば、Ctrl+を端末にG挿入するには、次の行を次の行に追加します。awk -v FS='\t' -v OFS='\t' -v ORS='\t'
~/.inputrc
Control-G: "awk -v FS='\t' -v OFS='\t' -v ORS='\t'"
その後、新しい端末を開き、Ctrl+と入力してGすぐに入力してください。
答え3
POSIXは何を定義しているので特殊変数のデフォルトはい、簡単なオプションは実行時に上書きすることです(簡単なオプションはソースを変更することです)。
この場合、共通コード(通常はブロック内)をライブラリファイルに入れることがgawk
できます。BEGIN {}
デフォルトのライブラリパス(/usr/share/awk/
または/usr/local/share/awk
)に配置する場合、またはAWKPATH
環境変数が次を指す場所に配置する場合は、フルパスを使用する必要はありません。
gawk -f tabfile.awk [...]
他のawksとは異なり、複数のオプションを許可し、gawk
コマンドラインとプログラムソースの両方を-f
混在させることができます。-f
最新バージョンは、追加のインクルード-i
ファイルオプション(gawk-4.1.0ベース)と@include
ディレクティブ(4.0.x AFAICTベース)をサポートしています。以下は少し強力で使い慣れたバージョンです-f
。
gawk '@include "tabfile"; /foo/ { ... }'
上記には、またはデフォルトtabfile.awk
のライブラリパスが含まれています。長い間サポートされてきましたが、今はシェルスクリプトラッパーを通してgawkの機能になりました。AWKPATH
@include
igawk
gawk
これは、次の2つの異なる良い答えと互換性があります。
alias awktab="gawk -i tabfile"
-v
このライブラリメソッドの使用とコマンドラインでの使用との間には微妙な違いがあります。コマンドラインオプションはawkコードが実行される前に適用されるため、ライブラリコードが実行されると設定されます。これは、ライブラリコードがそのような変数を使用する場合(たとえば、データファイルを読み取る)、重要です。