Score:-3

จะจัดเรียงแถวของไฟล์เป็นเมทริกซ์ได้อย่างไร?

ธง us

ฉันต้องการทราบวิธีจัดเรียงแถวของไฟล์ด้วยวิธีต่อไปนี้:

ไฟล์ของฉันคือ file.txt (คั่นด้วยแท็บ):

g1 00A98_01563 00554_01552 CCUG38_01373 
ก2 00554_01444
g3 00A98_04566 CCUG38_05322

ฉันต้องการสิ่งนี้ (คั่นด้วยแท็บ):

ก 00A98 00554 CCUG38
ก1 1 1 1
ก2 0 1 0
ก3 1 0 1

และ/หรือในรูปแบบนี้ (คั่นด้วยแท็บ):

ก 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373 
ก2 00554_01444 
g3 00A98_04566 CCUG38_05322

ฉันจะทำอย่างไรกับบรรทัดคำสั่งด้วย sort, awk, grep หรืออย่างอื่น

สิ่งที่ดีที่สุด ความนับถือ

24601 avatar
in flag
อ่าน [ถาม] และ [แก้ไข] คำถามของคุณพร้อมข้อมูลเกี่ยวกับสิ่งที่คุณได้ลองและสิ่งนี้เกี่ยวข้องกับอูบุนตูอย่างไร ดูแปลกใจเหมือนคำถามการบ้าน
cn flag
สิ่งที่คุณต้องการคือคุณลักษณะของสเปรดชีต ดังนั้น https://www.google.com/sheets/about/ หรือ libreoffice จึงเป็นเครื่องมือที่จะใช้
The_Bioinformatic_BATMAN avatar
us flag
รายการแก้ไข!
Score:4
ธง hr

โดยใช้ มิลเลอร์ให้ถือว่าอินพุตเป็นคู่คีย์-ค่าคั่นด้วย TAB เป็นตัวคั่นช่องอินพุต และขีดล่างเป็นตัวคั่นคู่อินพุต และตั้งค่าเอาต์พุตเป็น TSV จากนั้นคุณสามารถ ไม่กระจาย ข้อมูลของคุณ

$ mlr --idkvp --ifs แท็บ --ips '_' --otsv unsparsify file.txt
1 00A98 00554 CCUG38
ก1 01563 01552 01373
ก2 01444
ก3 04566 05322

จากนั้นคุณสามารถเพิ่มการแปลงต่างๆ เช่น

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify --fill-with 0 แล้วใส่ '
    สำหรับ(k,v ในแผนที่ยกเว้น($*,"1")){if(v != 0){$[k] = 1}}
  ' จากนั้นเปลี่ยนชื่อเป็น "1","g" file.txt
ก 00A98 00554 CCUG38
ก1 1 1 1
ก2 0 1 0
ก3 1 0 1

หรือ

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify แล้วใส่ -S '
    สำหรับ (k,v ในแผนที่ยกเว้น ($*,"1")){if(v != ""){$[k] = k "_" วี}}
  ' จากนั้นเปลี่ยนชื่อเป็น "1","g" file.txt
ก 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373
ก2 00554_01444
g3 00A98_04566 CCUG38_05322

การจัดตำแหน่งมีลักษณะ "ปิด" ในกรณีสุดท้าย แต่แสดงผลด้วย --ocsv แทนที่ --tsv ควรยืนยันว่าถูกต้อง

The_Bioinformatic_BATMAN avatar
us flag
ขอบคุณมากครับ! คุณทำให้ฉันปวดหัว!
Score:2
ธง cn

นี่คือ toMatrix.awk

#!/usr/bin/env เพ่งพิศ -f
เริ่มต้น { FS = OFS = "\t" }

{
    สำหรับ (i=2; i<=NF; i++) {
        x=$ผม
        ย่อย(/_.*/, "", x)
        ถ้า (!(x ในค่า)) {
            ค่า[x] = 1
            สั่งซื้อ[++value] = x
        }
        g[NR] = 1 ดอลลาร์
        ข้อมูล[NR][x]=1
    }
}

จบ {
    พิมพ์f "%s", "g"
    สำหรับ (i = 1; i <= ค่า; i++)
        printf "%s%s", OFS, สั่ง[i]
    พิมพ์ ""

    สำหรับ (nr = 1; nr <= NR; nr++) {
        พิมพ์f "%s", g[nr]
        สำหรับ (i = 1; i <= ค่า; i++)
            printf "%s%s", OFS, 0 + data[nr][สั่ง[i]]
        พิมพ์ ""
    }
}
$ gawk -f toMatrix.awk file.txt
ก 00A98 00554 CCUG38
ก1 1 1 1
ก2 0 1 0
ก3 1 0 1
The_Bioinformatic_BATMAN avatar
us flag
ขอบคุณมากครับ! คุณทำให้ฉันปวดหัว!

โพสต์คำตอบ

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