パイプで区切られたファイルがあり、最初の列を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"