Puncte:0

modificați anumite coloane pe baza unei alte coloane utilizând awk și gsub

drapel bt

Am un fișier (fișier1) cu milioane de rânduri și coloane. Un exemplu de date sunt:

"col1","col2","col3","col4","col5","col6"
„AAA”,0,5,10,”BGB”,50
„BBB”,4,7,10,”BFD”,76
"AAA",15,0,0,"BGB",20
"AAA",10,13,10,"DDD",23

Vreau să găsesc toate liniile care au AAA în col1 și apoi să obțin toate rândurile care au BGB în col5. Și, în sfârșit, reduceți cu 50% din fiecare valoare din col2, col3, col4 și col6 (Ignorați dacă valorile celulelor sunt 0 sau necompletate). Și imprimați toate rândurile fișierului. Deci, rezultatul meu va arăta astfel:

"col1","col2","col3","col4","col5","col6"
„AAA”,0,2,5,5,”BGB”,25
„BBB”,4,7,10,”BFD”,76
„AAA”,7.5,0,0,”BGB”,10
"AAA",10,13,10,"DDD",23

Am încercat următoarele, dar nu am putut să funcționeze (de asemenea, nu am putut să-mi dau seama cum să folosesc mai multe coloane în gsub)

grep AAA file1 | awk -F "," '$5~/BGB/ {gsub($6,\substr($6,1,length($6)-1)*0,50\, $6}1'
ChanganAuto avatar
drapel us
Ce legătură are asta cu Ubuntu?
NotTheDr01ds avatar
drapel vn
Sau subsistemul Windows pentru Linux (așa cum este etichetat)?
Puncte:1
drapel cn

awk poate potrivi modele ca grep, așa că aproape niciodată nu aveți nevoie de grep și awk într-o conductă.

Ai putea face

 awk'
    ÎNCEPE {FS = OFS = ","}
    $1 ~ /AAA/ && $5 ~ /BGB/ {
        dacă (2$) 2$ = 2$ / 2
        dacă (3 USD) 3 USD = 3 USD / 2
        dacă (4 USD) 4 USD = 4 USD / 2
        dacă (6 USD) 6 USD = 6 USD / 2
    }
    1
' dosar

Sau, dacă doriți să faceți coloanele să reducă mai dinamice

awk -v "coloane=2,3,4,6" '
    ÎNCEPE {
        FS = OFS = ","
        n = împărțit(coloane, a, /,/)
        pentru (i=1; i<=n; i++) cols[a[i]]=1
    }
    $1 ~ /AAA/ && $5 ~ /BGB/ {
        pentru (c în coloane) dacă ($c) $c = $c / 2
    }
    1
' dosar

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.