awk区切り記号設定

awk区切り記号設定

タブ区切りファイルを処理するために、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@includeigawkgawk

これは、次の2つの異なる良い答えと互換性があります。

alias awktab="gawk -i tabfile"

-vこのライブラリメソッドの使用とコマンドラインでの使用との間には微妙な違いがあります。コマンドラインオプションはawkコードが実行される前に適用されるため、ライブラリコードが実行されると設定されます。これは、ライブラリコードがそのような変数を使用する場合(たとえば、データファイルを読み取る)、重要です。

関連情報