Score:0

วิธีตรวจสอบว่าช่วงตัวเลขหนึ่งจากไฟล์หนึ่งเป็นส่วนย่อยของช่วงตัวเลขอื่นจากไฟล์อื่นหรือไม่

ธง ua

ฉันกำลังพยายามค้นหาว่าตัวเลข range1 [ทั้งคอลัมน์ a และ b] เป็นส่วนย่อยหรืออยู่ระหว่างคอลัมน์ของ range2 [ทั้งสองคอลัมน์ b และ c]

ช่วง1

 ก ข
15 20
 8 10
37 44
32 37

ช่วง2

 เอ บี ซี
    chr1 6 12
    chr2 13 21
    chr3 31 35
    chr4 36 45

เอาต์พุต:

    เอ บี ซี
chr1 6 12 8 10
chr2 13 21 15 20
chr4 36 45 37 44

ฉันพยายามเรียนรู้จากรหัสนี้ [ซึ่งใช้งานได้หากเราต้องการตรวจสอบว่ามีตัวเลขเดียวอยู่ในช่วงที่กำหนดหรือไม่] ดังนั้นฉันจึงลองแก้ไขตัวเลขเดียวกันสำหรับสองตัวเลขทั้งสอง แต่ไม่ได้ผล ฉันรู้สึกว่าฉันไม่สามารถอ่านไฟล์ที่สองได้อย่างถูกต้อง

ฉันต้องการเปรียบเทียบ range1[a] กับ range2[b] และ range1[b] กับ range2[c] การเปรียบเทียบแบบหนึ่งต่อทั้งหมด

ตัวอย่างเช่น ในการรันครั้งแรก: แถวแรกของช่วง -1 กับแถวอื่นทั้งหมดของช่วง -2แต่ควรเปรียบเทียบ range1[a] กับ range2[b] เท่านั้น และในทำนองเดียวกัน range1[b] ควรเปรียบเทียบกับ range2[c] เท่านั้น จากนี้ฉันได้เขียนเกณฑ์เท่านั้น:

ปอนด์[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= ปอนด์[i] && ubsf1[j] <= ubs[i]

r1[a] r2[b] r1[b] r2[ค]
15 > 6 20 < 12 ผิด
15 > 13 20 < 21 จริง
15 > 31 20 < 35 ผิด
15 > 36 20 < 45 ผิด 

รหัส: [อ้างอิง แต่แก้ไขเล็กน้อย]

    #!/bin/bash

awk -F'\t' '
# 1st pass (fileB): อ่านขอบเขตล่างและบน
FNR==NR { ปอนด์[++นับ] = $2+0; ubs[นับ] = $3+0; ต่อไป }
# 2nd pass (fileA): ตรวจสอบแต่ละบรรทัดเทียบกับทุกช่วง
{ lbsf1[++countf1] = $1+0; ubsf1[countf1] = $2+0; ต่อไป }
{
        สำหรับ (i=1;i<=count;++i)
                {
                        สำหรับ (j=1;j<=countf1;++j)
                        ถ้า (lbsf1[j] >= lbs[i] && lbsf1[j] <= ubs[i] && ubsf1[j] >= lbs[i] && ubsf1[j] <= ubs[i])
                                { พิมพ์ lbs[i]"\t"ubs[i]"\t"lbsf1[j]"\t"ubsf1[j] ; ต่อไป }
                }
}
' เรนจ์2 เรนจ์1

ขอขอบคุณ.

Arnaud Valmary avatar
my flag
สวัสดี จุดแรก ในบล็อกที่สอง `{...}` (ไม่มีเงื่อนไข) เรามีคำสั่ง `ถัดไป` ต่อท้าย ดังนั้นบล็อกที่สาม (พร้อมลูป) จะไม่ถูกดำเนินการ
Arnaud Valmary avatar
my flag
ได้ผลดีไหม ?
vibhu sharma avatar
ua flag
ใช่ ฉันได้รับเรซูเม่แล้ว
vibhu sharma avatar
ua flag
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
cn flag
ฉันลงคะแนนให้ปิดคำถามนี้เพราะมีการโพสต์ข้าม https://stackoverflow.com/q/69104341/4023950

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา