Bir dosyadan yalnızca bir eşik değerden daha büyük değerler nasıl çıkarılır?


10

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:


19

İle awk

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

açıklamalar

  • -F:- kaynak Fayırıcısını:
  • {if($2>10)print$2}- Her hat için test edip 2nd alandır >10, yani eğer printo
  • <filename- kabuğun dosyayı açmasına izin verin, bunu yapmanıza filenameizin vermekten daha iyi awk, bkz. Stéphane Chazelas'ın konuyla ilgili cevabı

Örnek çalışma

$ <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

i dosyadan ekrana bu durumda 10 üstün sadece ortalamalar sadece komutları 'kesim' ve 'grep' (temel komutlar) kullanan can .. Yardımın, mükemmel bir çözüm için çok teşekkür ederim
Haikel Fazzani

çözümünüzü anlıyorum, mükemmel, yardımlarınız için çok teşekkür ederim, tüm çabalarınızı takdir ediyorum ..
Haikel Fazzani

[[ $0 > 10 ]]
Bash'ın

@ tatlı: Ben şahsen deseni aksiyon ifadelerinden önce koymayı tercih ederim, örneğin: awk -F: '$ 2> 10 {print $ 2}', benim için daha düzenli ve uzatılması daha kolay (ör. $ 2> 10 && $ 2 <100) .
Stefan

3

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.


Çok zeki! İçin kısaltılabilir grep ':[1-9][0-9]\+\.' <file | cut -d: -f2ve 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.
tatlı

Benim RegEx bir hata bulduk: ondalık noktası olmayan sayılar için RegEx olması gerekir: ':[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.)
Stefan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.