kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 BurN135
BurN135
Question

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?

31 2012-01-04T21:32:13+00:00 3
 udo
udo
Pertanyaan edit 4 Januari 2012 в 10:00
Pemrograman
numbers
bash
awk
range
Pertanyaan ini memiliki :value jawaban dalam bahasa Inggris, untuk membacanya masuk ke akun Anda.
 Kambus
Kambus
4 Januari 2012 в 9:41
2012-01-04T21:41:09+00:00
Lebih
Sumber
Sunting
#15110541
awk '{ if ($4 >= 1 && $4 <= 10) print $1 }' sample.txt
 Kambus
Kambus
Jawaban edit 4 Januari 2012 в 9:54
64
0
 olibre
olibre
4 Januari 2012 в 9:47
2012-01-04T21:47:08+00:00
Lebih
Sumber
Sunting
#15110542
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
 PhD
PhD
Jawaban edit 14 April 2017 в 5:37
14
0
 gpojd
gpojd
4 Januari 2012 в 9:38
2012-01-04T21:38:17+00:00
Lebih
Sumber
Sunting
#15110540

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
 gpojd
gpojd
Jawaban edit 4 Januari 2012 в 9:55
2
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Daniel Gogov
Terdaftar 6 hari yang lalu
2
工藤 芳則
Terdaftar 1 minggu yang lalu
3
Ирина Беляева
Terdaftar 2 minggu yang lalu
4
Darya Arsenyeva
Terdaftar 2 minggu yang lalu
5
anyta nuam-nuam (LapuSiK)
Terdaftar 2 minggu yang lalu
ID
JA
RU
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi