
ファイル内でユーザーが入力したパターンを検索する 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 }」は省略できます。