質問: やり方がわかりません。 番号|名前|身長|体重 を記録したテーブルがあります。 ここから、身長170センチ以上180センチ以下の人を抽出したいのですが、 ``` grep $a ファイル名 ``` $aに170や180の身長を入れてwhileで回して検索していたのですが このやり方では体重とかぶって正確な値が出ない場合があります。 (体重170キロの人が抽出されました) そこで列指定で、検索したいのですがやり方が思いつきません。 いい方法があればご教授ください。
回答: 「シェルスクリプト」と言われてるので、あえて awk 使わず区切り文字の指定に `IFS` を使う例を。 ``` is_height_in_range() { local min=$1 local max=$2 local line="$3" IFS="|" set -- ${line} [ "$3" -ge "$min" ] && [ "$3" -le "$max" ] return } IFS= while read line; do is_height_in_range 170 180 "$line" || continue printf '%s\n' "$line" done ``` `local` 使ってるので POSIX 互換ではないですが、たいていのシェルで動くと思います。 `read` が 0 以外のステータスを返すと `while` ループから抜けてしまうので、ファイル末尾に改行がないと最終行が無視されますが、回答における本質ではないし実用上はあまり問題ないかと思うのでシンプルさを優先しました。