Bu dosya var:
names average
john:15.02
Mark:09.63
James:12.58
Ben sadece ondan daha büyük ortalamaları ayıklamak istiyorum, bu nedenle bu örnekte çıktı olmalıdır:
15.02
12.58
Bu dosya var:
names average
john:15.02
Mark:09.63
James:12.58
Ben sadece ondan daha büyük ortalamaları ayıklamak istiyorum, bu nedenle bu örnekte çıktı olmalıdır:
15.02
12.58
Yanıtlar:
awk
awk -F: '{if($2>10)print$2}' <filename
-F:
- kaynak F
ayırıcısını:
{if($2>10)print$2}
- Her hat için test edip 2
nd alandır >10
, yani eğer print
o<filename
- kabuğun dosyayı açmasına izin verin, bunu yapmanıza filename
izin vermekten daha iyi awk
, bkz. Stéphane Chazelas'ın konuyla ilgili cevabı$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58
Bu eşit, böylece boşluk eklemek ve parantez dışındaki desen koymak da mümkündür - sayesinde Stefan işaret için:
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
[[ $0 > 10 ]]
Grep ile düzenli ifadelerle çalışmanız gerekir; Örneğin
grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2
sed ile olduğu gibi:
sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file
Ama düzenli veri RegEx kullanmak hata eğilimli (benim durumumda) ve ;-) okumak zor.
grep ':[1-9][0-9]\+\.' <file | cut -d: -f2
ve sed -n 's/.*:\([1-9][0-9]\+\..*\)/\1/p' <file
. Bunun sadece> 1,> 10,> 100 vb. İle çalıştığını belirtmek gerekir, örneğin> 20 imkansızdır.
':[1-9][0-9]\+\.\?'
- değişmez ondalık noktası \. isteğe bağlıdır ve en fazla bir kez eşleştirilir \ ?. (@ tatlı, benim RegEx'in kısıtlamasını gösterdiğin için teşekkürler.)