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.