periksa nilai1 di kolom 1 dan nilai 4 di kolom 4 dan cetak seluruh baris, bash

Saya punya file data.txt.

    1   2    3     4       5       6       7
    cat data.txt
1   10 100 1100 10.0000 10.1122 60.0000 60.1111 
2   11 110 1110 10.1122 10.3333 60.1111 61.3333
3   12 120 1120 10.3333 11.0547 61.3333 61.9999
4   13 130 1130 11.0547 11.1111 61.9999 62.4444
5   14 140 1140 11.1111 10.1122 62.4444 62.8888
6   15 150 1150 10.1122 10.3333 61.3333 61.9999 
7   16 160 1160 10.3333 11.1111 60.1111 61.3333
8   17 170 1170 11.0547 11.5555 61.3333 64.1111
9   18 180 1180 10.3333 11.1111 61.3333 61.3333
10  19 190 1190 11.0547 11.5555 60.1111 64.1111
11  20 200 1200 11.1111 10.1122 62.4444 62.8888

Saya ingin menemukan semua nilai secara berurutan dari 10.1122 di column 4 hingga 11.1111. Dan nilainya berurutan dari 60.1111 di column 6 hingga 61.9999.

'anubhava' dan 'kent' menyarankan (Terima kasih!) untuk digunakan

awk -v col=4 -v start=10.1122 -v end=11.1111 '$col>=start && $col<=end{ print $col}' data.txt | sort -nu

   1  10.1122 
   2  10.3333
   3  11.0547
   4  11.1111

awk -v col=6 -v start=60.1111 -v end=61.9999 '$col>=start && $col<=end{ print $col}' data.txt | sort -nu

   1  60.1111 
   2  61.3333
   3  61.9999

Saya ingin mencetak/menyimpan dalam file results.txt baris-baris di dalamnya

col4: 10.1122 && col6: 60.1111
col4: 10.3333 && col6: 60.1111
col4: 11.0547 && col6: 60.1111
col4: 10.1122 && col6: 61.3333
col4: 10.3333 && col6: 61.3333
col4: 11.0547 && col6: 61.3333

maksudnya garis -->

2   11 110 1110 10.1122 10.3333 60.1111 61.3333
6   15 150 1150 10.1122 10.3333 61.3333 61.9999 
7   16 160 1160 10.3333 11.1111 60.1111 61.3333
8   17 170 1170 11.0547 11.5555 61.3333 64.1111
9   18 180 1180 10.3333 11.1111 61.3333 61.3333
10  19 190 1190 11.0547 11.5555 60.1111 64.1111

Ada saran? Itu sebabnya saya mengharapkan hasil awk disimpan di array1 dan array2 sehingga dapat menemukan baris di mana nilai col4 dan nilai col6 ada.

Terima kasih.


person user3652962    schedule 24.05.2014    source sumber
comment
Pertanyaan Anda terlalu membingungkan. Silakan edit agar lebih jelas.   -  person glenn jackman    schedule 25.05.2014
comment
kenapa baris #3 #4...tidak ada hasilnya?   -  person Kent    schedule 25.05.2014
comment
Karena line #3 dan line #9 sama. Seharusnya hanya mencetak satu bukti col4: 10.3333 && col6: 61.3333 Line #4 memiliki col4: 11.0547 && col6: 61.9999 Saya hanya ingin pasangan hingga nilai kedua terakhir dari kedua kolom, 4 dan 6.   -  person user3652962    schedule 25.05.2014


Jawaban (1)


baris ini harus melakukan:

awk -v f4=10.1122 -v t4=11.1111 -v f6=60.1111 -v t6=61.9999 
      '$4>=f4&&$4<=t4&&$6>=f6&&$6<=t6' file

hasilnya adalah:

11 110 1110 10.1122 10.3333 60.1111 61.3333
12 120 1120 10.3333 11.0547 61.3333 61.9999
13 130 1130 11.0547 11.1111 61.9999 62.4444
15 150 1150 10.1122 10.3333 61.3333 61.9999 
16 160 1160 10.3333 11.1111 60.1111 61.3333
17 170 1170 11.0547 11.5555 61.3333 64.1111
18 180 1180 10.3333 11.1111 61.3333 61.3333
19 190 1190 11.0547 11.5555 60.1111 64.1111

perhatikan bahwa, dengan kriteria yang Anda tentukan: baris yang dimulai dengan 12 and 13 juga harus ada di output.

Selain itu, nomor baris ditambahkan oleh Anda, tetapi tidak di file, bukan? jika tidak, kolom4 akan menjadi kolom5... jadi saya hapus saja kolom nomor baris pertama.

person Kent    schedule 24.05.2014
comment
Terima kasih Kent. Berhasil! Saya mengedit bagian '$4>=f4&&$4<t4&&$6>=f6&&$6<t6' karena saya tidak ingin mencocokkan nilai terakhir dari kedua col4&&col6. Namun masalahnya adalah ia juga mencetak baris yang terdapat lebih dari satu instance col4:val4&&col6:val6. Adakah saran untuk menghindari hal ini? - person user3652962; 25.05.2014