私はこのファイルを持っています:
names average
john:15.02
Mark:09.63
James:12.58
10より大きい平均のみを抽出したいので、この例の出力は次のようになります。
15.02
12.58
awk
ありawk -F: '{if($2>10)print$2}' <filename
-F:
– F
ield区切り文字を:
に設定します{if($2>10)print$2}
–各行について、2
ndフィールドが>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
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を使用すると、エラーが発生しやすく(私の経験では)、読みにくくなります;-)。