Puncte:-3

Cum se sortează rândurile unui fișier ca matrice?

drapel us

Aș dori să știu cum pot sorta rândurile unui fișier în felul următor:

Fișierul meu este file.txt (delimitat de file):

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

Vreau să obțin asta (delimitat de file):

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

Și/sau, de asemenea, în acest format (delimitat de file):

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

Cum pot face asta cu linia de comandă cu sort, awk, grep sau altul?

Toate cele bune, Salutari

24601 avatar
drapel in
citește [întreaba] și [editează] întrebarea ta cu informații despre ce ai încercat și cum se leagă asta cu ubuntu. Pare surprinzător ca o întrebare despre teme
drapel cn
ceea ce vrei este o caracteristică a foilor de calcul. Deci https://www.google.com/sheets/about/ sau libreoffice ar fi instrumentul de utilizat.
The_Bioinformatic_BATMAN avatar
drapel us
Listat, editat!
Puncte:4
drapel hr

Folosind Miller, tratați intrarea ca perechi delimitare cheie-valoare cu TAB ca separator de câmpuri de intrare și subliniere ca separator de perechi de intrare și setați ieșirea la TSV. Atunci poti nesparsificat datele tale

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

Puteți adăuga apoi diverse transformări de ex.

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify --fill-with 0 apoi pune '
    pentru(k,v în mapexcept($*,"1")){dacă(v != 0){$[k] = 1}}
  ' apoi redenumiți „1","g” fișier.txt
g 00A98 00554 CCUG38
g1 1 1 1
g2 0 1 0
g3 1 0 1

sau

$ mlr --idkvp --ifs tab --ips '_' --otsv unsparsify apoi pune -S '
    pentru(k,v în mapexcept($*,"1")){dacă(v != ""){$[k] = k ."_". v}}
  ' apoi redenumiți „1","g” fișier.txt
g 00A98 00554 CCUG38
g1 00A98_01563 00554_01552 CCUG38_01373
g2 00554_01444
g3 00A98_04566 CCUG38_05322

Alinierea pare „dezactivată” în ultimul caz, dar iese cu --ocsv in locul --tsv ar trebui să confirme că este corect.

The_Bioinformatic_BATMAN avatar
drapel us
multumesc mult frate! m-ai scutit de o durere de cap!
Puncte:2
drapel cn

Aceasta este toMatrix.awk

#!/usr/bin/env gawk -f
BEGIN { FS = OFS = "\t" }

{
    pentru (i=2; i<=NF; i++) {
        x=$i
        sub(/_.*/, "", x)
        dacă (!(x în valori)) {
            valori [x] = 1
            ordonat[++valoare] = x
        }
        g[NR] = $1
        date[NR][x]=1
    }
}

SFÂRŞIT {
    printf „%s”, „g”
    pentru (i = 1; i <= valoare; i++)
        printf „%s%s”, OFS, ordonat[i]
    imprimare ""

    pentru (nr = 1; nr <= NR; nr++) {
        printf „%s”, g[nr]
        pentru (i = 1; i <= valoare; i++)
            printf „%s%s”, OFS, 0 + date[nr][ordered[i]]
        imprimare ""
    }
}
$ 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
drapel us
Multumesc mult frate! m-ai scutit de o durere de cap!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.