awk を使用して Unix のファイル内のユーザー入力をパターン検索する

awk を使用して Unix のファイル内のユーザー入力をパターン検索する

ファイル内でユーザーが入力したパターンを検索する awk スクリプトを書こうとしています。
コードは次のようになります。
awk 'BEGIN{printf "Enter : ";getline input<"/dev/tty"} /'"$input"'/ {print}' <abc.txt
出力として得られるのはファイル全体です。どこが間違っているのか、誰か教えてくれませんか?

答え1

何をするかというと、ttyからパターンを読み取り、それをawkの変数(シェルの変数ではない)に入力し、次に、シェルinput という変数です。(引用符を見て、自分でコードを解釈してみてください。) その変数は空なので、awk は、常に一致する空の正規表現である // と行を一致させます。

あなたがすべきことは

$0 ~ input { print }

または

match( $0, input) { print }

実際には、一致する事項に対するデフォルトのアクションはレコードを印刷することであるため、「{ print }」は省略できます。

関連情報