Menggunakan AWK untuk menyaring kolom dengan rentang numerik

Saya relatif baru mengenal BASH dan saya mencoba menggunakan awk untuk menyaring data kolom 1 berdasarkan kolom ke-4 dari file teks. Jika kolom ke-4 data cocok dengan rentang x, maka data kolom 1 akan dikeluarkan. "x &" adalah rentang angka 1-10 (1,2,3..10).

awk -F: '{ if($4=="x") print $1}' filename.txt

filename.txt 
sample1 0 0 4
sample2 0 0 10
sample3 0 0 15
sample4 0 0 20

Penggunaan yang sebenarnya:

awk -F: '{ if($4=="1-10") print $1}' sample.txt
output = sample1, sample2, sample3, sample4

Seharusnya: sampel1 sampel2 saja.

Apakah ada kesalahan dalam sintaks yang tidak saya lihat atau saya mungkin menggunakan sintaks ini sepenuhnya salah?


awk '{ if ($4 >= 1 && $4 
Komentar (5)
awk '$4 ~ /^[1-9]$|^10$/{print $1}' sample.txt

keluaran:

sample1
sample2

penjelasan:

  • ^[1-9]$ --> $4 harus berupa satu digit dari 1 sampai 9
  • | (pipa) --> atau
  • ^10$ --> $4 harus berupa angka 10
Komentar (0)

Mungkin ada cara untuk melakukannya hanya dengan menggunakan awk (nevermind, lihat suntingan saya di bawah ini), tetapi saya tidak mengetahuinya. Saya akan menggabungkannya dengan grep:

egrep ' ([1-9]|10)$' sample.txt | awk '{print $1}'

Saya pikir Anda mencocokkan kolom keempat dengan string "1-10" bukan rentangnya. Juga, -F: akan mengubah pembatas menjadi titik dua daripada spasi.

Edit:

awk '$4 ~ /^([1-9]|10)$/ {print $1}' sample.txt
Komentar (0)