Score:0

เล่นกับคำสั่ง awk พยายามลบบรรทัดแรกในอินพุต

ธง kg

ด้านล่างเป็นไฟล์อินพุตของฉัน ผลลัพธ์จะส่งคืน "Breed has Votes โหวต"

    สายพันธุ์โหวต
    ห้องแล็บสีดำ, 30
    ชิวาวา, 2
    ปั๊ก, 1
    คอร์กี้ 45
    ชาร์เป่ย 21
    ชิสุ 5
    มอลทีส, 7

#!/bin/sh/awk
##comment สคริปต์ awk ด้านล่างทำงานบนไฟล์ dog_breed.txt, FS หมายถึงตัวคั่นฟิลด์ซึ่งเป็นเครื่องหมายจุลภาคในกรณีนี้ เราเริ่มต้นตัวแปร max ของเราเป็น 0 และ max_breed เป็นสายพันธุ์แรก จากนั้นวนซ้ำในแถวเพื่อหาสายพันธุ์ที่ได้รับการโหวตสูงสุด
    
    เริ่ม{
            เอฟเอส = ", "
            สูงสุด=0;
            max_breed=1 ดอลลาร์
    }
    {
            ถ้า(สูงสุด<($2)){
                    สูงสุด=$2;
                    max_breed=$1;
            }
    }
    จบ{
            พิมพ์ max_breed " มี " สูงสุด " โหวต"
    }
Score:1
ธง hr

คุณสามารถข้ามบันทึกแรก (บรรทัด) ได้โดยเพิ่ม a กฎ ไปที่บล็อก:

NR > 1 {
        ถ้า(สูงสุด<($2)){
                สูงสุด=$2;
                max_breed=$1;
        }
}

อย่างไรก็ตาม คุณควรพยายามทำความเข้าใจว่าทำไมคุณถึงได้รับผลลัพธ์ที่คุณทำเมื่อคุณ อย่า ยกเว้นบรรทัดแรก - นั่นเป็นเพราะ:

  • เมื่อไร NR==1, คุณค่าของ สูงสุด เป็น 0 (ตัวเลข - กำหนดใน เริ่ม block)แต่ค่าของ $2 เป็น โหวต (ซึ่งเป็นสตริง) ดังนั้นการแสดงออก สูงสุด<($2) เปลี่ยนใจเลื่อมใส สูงสุด เป็นสตริงและทำการเปรียบเทียบคำศัพท์ ถ้า 0 น้อยกว่า วี ในภาษาของคุณ ผลลัพธ์จะเป็น TRUE และ สูงสุด ได้รับมอบหมายให้ ค่าสตริง โหวต

  • สำหรับบรรทัดต่อมา $2 เป็นตัวเลขแต่ สูงสุด ตอนนี้เป็นสตริงดังนั้น $2 ถูกแปลงเป็นสตริงและการเปรียบเทียบเป็นพจนานุกรมอีกครั้ง ทะลึ่ง วี มีน้ำหนักศัพท์มากกว่าหลักใดๆ 0 ผ่าน 9, วี ชนะตลอด.

นอกจากนี้ shebang ของคุณดูไม่ถูกต้อง - น่าจะเป็น

#!/usr/bin/awk -f

หรือ

#!/bin/awk -f

ขึ้นอยู่กับเวอร์ชัน Ubuntu ของคุณ นอกจากนี้การมอบหมายงานเช่น max_breed=1 ดอลลาร์ ไม่มีความหมายจริงๆใน เริ่ม บล็อกเนื่องจากมีการดำเนินการ ก่อน บันทึกใด ๆ ได้รับการประมวลผล

Score:0
ธง cn

หากต้องการลบบรรทัดแรกด้วย awk:

awk 'NR>1' อินพุต_ไฟล์

หรือใช้หาง:

หาง -n+2 อินพุตไฟล์
iwantcaketoo avatar
kg flag
ฉันจะนำไปใช้กับโค้ดได้อย่างไร เมื่อฉันเพิ่มเข้าไป มันให้ค่าที่ไม่ถูกต้อง
iwantcaketoo avatar
kg flag
ฉันรู้ว่าฉันทำ cat dogbreed.csv | หาง -n+2 | awk -F',' 'BEGIN{breed="";votes=0;}{if($2>votes){votes=$2;breed=$1;}}END{print Breed " มี " โหวต " โหวต";} '
iwantcaketoo avatar
kg flag
แต่คำสั่งระบุว่า เว้นแต่จะระบุไว้เป็นอย่างอื่น ไฟล์สคริปต์ของคุณจะได้รับการทดสอบในระบบของเราด้วยคำสั่งต่อไปนี้: awk -f

โพสต์คำตอบ

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