awkコマンドにスクリプト引数を渡す

awkコマンドにスクリプト引数を渡す

パイプで区切られたファイルがあり、最初の列を grep して、パターンが一致した場合は行全体を出力する必要があります。以下のコマンドは動作しますが、スクリプトに配置すると、コマンドが$1競合すると思います。

指示:

awk -F'|' < filename '{if ($1 == "stringtomatch") print $0}'

脚本:

./scripts.sh stringtomatch

スクリプト内のコマンド:

awk -F'|' < filename '{if ($1 == "$1") print $0}'

二重引用符で囲まれているのは$1、スクリプトに渡される引数です。これを機能させる方法についてアドバイスはありますか?

答え1

を大幅に簡素化できることに注意してくださいawk。式が に評価された場合のデフォルトのアクションは、true現在の行を印刷することです。したがって、これは同じことを行います。

awk -F'|' < filename '$1 == "string"'

とにかく、-vオプションを使用して変数を渡すことができるので、スクリプトは次のようになります。

#/bin/sh

if [ $# -lt 1 ]; then
  echo "At least one argument is required"
  exit
fi

## Allow the script to get the filename from the 2nd argument, 
## default to 'filename' if no second argument is given
file=${2:-filename}

awk -F'|' -v str="$1" '$1 == str' "$file"

関連情報