Điểm:0

Làm cách nào để kiểm tra xem một dãy số từ một tệp có phải là tập hợp con của dãy số khác từ tệp khác không?

lá cờ ua

Tôi đang cố gắng tìm hiểu xem các số trong phạm vi 1 [cả hai cột a và b] là tập hợp con hay nằm giữa các cột của phạm vi 2 [cả hai cột b và c].

phạm vi1

 một b
15 20
 8 10
37 44
32 37

phạm vi2

 một b c
    chr1 6 12
    chr2 13 21
    chr3 31 35
    chr4 36 45

đầu ra:

    một b c
chr1 6 12 8 10
chr2 13 21 15 20
chr4 36 45 37 44

Tôi đã cố gắng học từ mã này [mã này đang hoạt động nếu chúng tôi muốn kiểm tra xem một số có nằm trong một phạm vi cụ thể hay không], do đó tôi đã thử sửa đổi mã tương tự cho cả hai số. Nhưng không hoạt động, tôi cảm thấy mình không thể đọc đúng tệp thứ hai.

Tôi muốn so sánh phạm vi1[a] với phạm vi2[b] và phạm vi1[b] với phạm vi2[c]. Một để tất cả so sánh.

Ví dụ: trong lần chạy đầu tiên: hàng đầu tiên của phạm vi-1 với tất cả các hàng khác của phạm vi-2.Nhưng phạm vi1[a] chỉ nên được so sánh với phạm vi2[b] và tương tự, phạm vi1[b] chỉ nên được so sánh với phạm vi2[c]. Chỉ dựa trên điều này, tôi đã viết một tiêu chí:

lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i]

r1[a] r2[b] r1[b] r2[c]
15 > 6 20 < 12 Sai
15 > 13 20 < 21 Đúng
15 > 31 20 < 35 Sai
15 > 36 20 < 45 Sai 

Mã số: [thẩm quyền giải quyết nhưng ít sửa đổi]

    #!/bin/bash

awk -F'\t' '
# 1st pass (fileB): đọc giới hạn phạm vi dưới và trên
FNR==NR { lbs[++count] = $2+0; ubs[count] = $3+0; tiếp theo }
# 2nd pass (fileA): kiểm tra từng dòng so với tất cả các phạm vi.
{ lbsf1[++countf1] = $1+0; ubsf1[countf1] = $2+0; tiếp theo }
{
        for(i=1;i<=count;++i)
                {
                        for(j=1;j<=countf1;++j)
                        if (lbsf1[j] >= lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i])
                                { print lbs[i]"\t"ubs[i]"\t"lbsf1[j]"\t"ubsf1[j] ; tiếp theo }
                }
}
' phạm vi2 phạm vi1

Cảm ơn bạn.

Arnaud Valmary avatar
lá cờ my
Xin chào. Điểm đầu tiên, vào khối thứ hai `{...}` (không có điều kiện), chúng ta có câu lệnh `next` ở cuối. Vì vậy, khối thứ ba (có vòng lặp) không bao giờ được thực thi.
Arnaud Valmary avatar
lá cờ my
Bạn có một kết quả tốt?
vibhu sharma avatar
lá cờ ua
vâng, tôi đã nhận được kết quả; t
vibhu sharma avatar
lá cờ ua
https://stackoverflow.com/questions/69104341/how-to-check-whether-one-number-range-from-one-file-is-the-subset-of-other-numbe/69105292#69105292
αғsнιη avatar
lá cờ cn
Tôi đang bỏ phiếu để đóng câu hỏi này vì đã đăng chéo https://stackoverflow.com/q/69104341/4023950

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.