web-dev-qa-db-ja.com

ファイルからしきい値より大きい値のみを抽出する方法は?

私はこのファイルを持っています:

names average
john:15.02
Mark:09.63
James:12.58

10より大きい平均のみを抽出したいので、この例の出力は次のようになります。

15.02
12.58
9
Haikel Fazzani

awkあり

awk -F: '{if($2>10)print$2}' <filename

説明

  • -F:Field区切り文字を:に設定します
  • {if($2>10)print$2} –各行について、2ndフィールドが>10であるかどうかをテストします。そうである場合はprint it
  • <filename –シェルにファイルfilenameを開かせます。awkに任せるよりはましです。トピックに関する StéphaneChazelasの回答を参照してください

実行例

$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58

スペースを追加し、括弧の外側にパターンを配置することもできます。したがって、これらは等しくなります。 Stefan が指摘しているおかげです。

awk -F: '{if($2>10)print$2}' <filename
awk -F: '{ if ( $2 > 10 ) print $2 }' <filename
awk -F: '$2>10{print$2}' <filename
awk -F: '$2 > 10 { print $2 }' <filename
16
dessert

Grepでは、正規表現を使用する必要があります。例えば.

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

sedと同様:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file

しかし、順序付けされたデータでRegExを使用すると、エラーが発生しやすく(私の経験では)、読みにくくなります;-)。

3
Stefan