awk Print ステートメントの変数置換 -v

awk Print ステートメントの変数置換 -v

私はこれをするのに1時間以上費やしました。これは難しいことではありません...あるファイルのデータ列を別のファイルに印刷したいです。印刷する列は、渡された内容とスクリプトの前に発生した内容によって異なりますが、COLと呼ばれます。情報を抽出する必要があるファイルは$ 1.dbです。 $ 1は最初に渡されたパラメータです(存在するかどうかを確認します)。私が現在持っているもの:

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp

これにより、列だけでなく$ 1.dbの内容全体がtmp2.tmpとして印刷されます。

sh -xv するとわかります。

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp
+ awk -v colvar=3 '{ print $colvar }' cop4342.db

したがって、awk varはCOL値に設定されていますが、printステートメントでは置き換えられないことがわかります。私はこれが一重引用符のためだと思いますが、何をすべきかわかりません。どんな助けにも感謝します:)

ベストアンサー1

1 つのデータ列のみを抽出するには、次を使用できます。cut。たとえば、ファイルに次のものがexample.dat含まれている場合

a b c d e
1 2 3 4 5

それからcut -d ' ' -f 3 example.dat与えられた

c
3

ここで、フィールド区切り文字は空白なので、3番目の列を選択します。

編集する:このbashスクリプトはawkを呼び出して同等の出力を生成します。

#!/bin/bash
var1=$1

awk '{print $colvar}' colvar=$1 example.dat

おすすめ記事