awkステートメントで変数を使用するには? [コピー]

awkステートメントで変数を使用するには? [コピー]

このようなスクリプトがあります。

#!/bin/ksh
echo "Enter the matching pattern"
read pattern
path= /home/siva/
echo "Navigating to $path"
cd $path
cat filename|awk '/$pattern/ {for (i=1; i<=10; i++) {getline;print}}'

$patternスクリプトの実行時に入力できません。

答え1

echo | awk -v variable='This is variable!' 'END{print variable}'

キーワードを使用して変数を渡すことができます-v。そして使用しないでください$変数の場合は-bashではありません。 awkの目的$フィールドにアクセスします。

答え2

#!/bin/ksh
echo "Enter the matching pattern"
IFS= read -r pattern
path=/home/siva/
echo "Navigating to $path"
cd "$path" || exit
awk -v pattern="$pattern" '$0 ~ pattern{for (i=1; i<=10; i++) {getline;print}}' filename
  1. awk -v を使用して awk スクリプトに変数を渡します。
  2. catは不要です - awkはファイルを直接処理できます

関連情報