Điểm:-3

Làm cách nào để sắp xếp các hàng của tệp dưới dạng ma trận?

lá cờ us

Tôi muốn biết cách sắp xếp các hàng của tệp theo cách sau:

Tệp của tôi là file.txt (được phân cách bằng tab):

g1 00A98_01563 00554_01552 CCUG38_01373 
g2 00554_01444
g3 00A98_04566 CCUG38_05322

Tôi muốn lấy cái này (được phân định bằng tab):

g 00A98 00554 CCUG38
g1 1 1 1
g2 0 1 0
g3 1 0 1

Và/hoặc cũng ở định dạng này (được phân định bằng tab):

g 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373 
g2 00554_01444 
g3 00A98_04566 CCUG38_05322

Làm cách nào tôi có thể thực hiện điều đó bằng dòng lệnh với sắp xếp, awk, grep hoặc cách khác?

Tất cả những điều tốt nhất, Trân trọng

24601 avatar
lá cờ in
đọc [hỏi] và [chỉnh sửa] câu hỏi của bạn với thông tin về những gì bạn đã thử và cách điều này liên quan đến ubuntu. Có vẻ ngạc nhiên như một câu hỏi bài tập về nhà
lá cờ cn
những gì bạn muốn là một tính năng của bảng tính. Vì vậy, https://www.google.com/sheets/about/ hoặc libreoffice sẽ là công cụ để sử dụng.
The_Bioinformatic_BATMAN avatar
lá cờ us
Liệt kê, chỉnh sửa!
Điểm:4
lá cờ hr

sử dụng cối xay, coi đầu vào là các cặp khóa-giá trị phân tách với TAB làm dấu tách trường đầu vào và dấu gạch dưới làm dấu tách cặp đầu vào, đồng thời đặt đầu ra thành TSV. Sau đó bạn có thể làm loãng dữ liệu của bạn

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify file.txt
1 00A98 00554 CCUG38
g1 01563 01552 01373
g2 01444
g3 04566 05322

Sau đó, bạn có thể thêm các phép biến đổi khác nhau.

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify --fill-with 0 sau đó đặt '
    for(k,v in mapngoại trừ($*,"1")){if(v != 0){$[k] = 1}}
  ' sau đó đổi tên "1","g" file.txt
g 00A98 00554 CCUG38
g1 1 1 1
g2 0 1 0
g3 1 0 1

hoặc

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify rồi đặt -S '
    for(k,v in mapngoại trừ($*,"1")){if(v != ""){$[k] = k ."_". v}}
  ' sau đó đổi tên "1","g" file.txt
g 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373
g2 00554_01444
g3 00A98_04566 CCUG38_05322

Căn chỉnh có vẻ "tắt" trong trường hợp cuối cùng, nhưng xuất ra với --ocsv thay cho --tsv nên xác nhận là đúng.

The_Bioinformatic_BATMAN avatar
lá cờ us
rất cảm ơn bạn! bạn đã cứu tôi một cơn đau đầu!
Điểm:2
lá cờ cn

Đây là toMatrix.awk

#!/usr/bin/env trố mắt -f
BẮT ĐẦU { FS = OFS = "\t" }

{
    cho (i=2; i<=NF; i++) {
        x=$i
        phụ(/_.*/, "", x)
        if (!(x trong giá trị)) {
            giá trị [x] = 1
            đã đặt hàng[++giá trị] = x
        }
        g[NR] = $1
        dữ liệu[NR][x]=1
    }
}

CHẤM DỨT {
    printf "%s", "g"
    cho (i = 1; i <= giá trị; i++)
        printf "%s%s", OFS, đã đặt hàng[i]
    in ""

    for (nr = 1; nr <= NR; nr++) {
        printf "%s", g[nr]
        cho (i = 1; i <= giá trị; i++)
            printf "%s%s", OFS, 0 + data[nr][ordered[i]]
        in ""
    }
}
$ gawk -f toMatrix.awk file.txt
g 00A98 00554 CCUG38
g1 1 1 1
g2 0 1 0
g3 1 0 1
The_Bioinformatic_BATMAN avatar
lá cờ us
Rất cảm ơn bạn! bạn đã cứu tôi một cơn đau đầu!

Đă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.