Điểm:0

sửa đổi các cột cụ thể dựa trên một cột khác bằng cách sử dụng awk và gsub

lá cờ bt

Tôi có một tệp (tệp1) với hàng triệu hàng và cột. Một ví dụ về dữ liệu là:

"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

Tôi muốn tìm tất cả các dòng có AAA trong cột 1 và sau đó lấy tất cả các dòng có BGB trong cột 5. Và cuối cùng, giảm 50% mọi giá trị trong col2, col3, col4 và col6 (Bỏ qua nếu giá trị ô là 0 hoặc trống). Và in tất cả các dòng của tập tin. Vì vậy, đầu ra của tôi sẽ giống như sau:

"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

Tôi đã thử các cách sau, nhưng không thể làm cho nó hoạt động (đồng thời, không thể tìm ra cách sử dụng nhiều cột trong gsub)

grep tập tin AAA1 | awk -F "," '$5~/BGB/ {gsub($6,\substr($6,1,length($6)-1)*0.50\, $6}1'
ChanganAuto avatar
lá cờ us
Điều này có liên quan gì đến Ubuntu?
NotTheDr01ds avatar
lá cờ vn
Hoặc Hệ thống con Windows cho Linux (như được gắn thẻ)?
Điểm:1
lá cờ cn

awk có thể khớp với các mẫu giống như grep, vì vậy bạn gần như không bao giờ cần grep và awk trong một đường dẫn.

bạn có thể làm

 awk'
    BẮT ĐẦU {FS = OFS = ","}
    $1 ~ /AAA/ && $5 ~ /BGB/ {
        nếu ($2) $2 = $2 / 2
        nếu ($3) $3 = $3 / 2
        nếu ($4) $4 = $4 / 2
        nếu ($6) $6 = $6 / 2
    }
    1
' tập tin

Hoặc, nếu bạn muốn làm cho các cột giảm động hơn

awk -v "cột = 2,3,4,6" '
    BẮT ĐẦU {
        FS = OFS = ","
        n = chia (cột, a, /,/)
        for (i=1; i<=n; i++) cols[a[i]]=1
    }
    $1 ~ /AAA/ && $5 ~ /BGB/ {
        for (c in cols) if ($c) $c = $c / 2
    }
    1
' tập tin

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