คำสั่ง Unix เพื่อรับจำนวนบรรทัดในไฟล์ CSV


22

ฉันต้องรับจำนวนบรรทัดจากไฟล์ CSV ที่เข้ามา

ฉันใช้คำสั่งต่อไปนี้เพื่อรับการนับ

wc -l filename.csv

พิจารณาไฟล์ที่มาพร้อมกับ 1 บันทึกฉันได้รับไฟล์บางคนที่มีจุดเริ่มต้นและสำหรับไฟล์เหล่านั้นถ้าผมออกคำสั่งดังกล่าวข้างต้นจะส่งกลับนับ \*0

ทำไม\*จุดเริ่มต้นของไฟล์ไม่ได้ลงทะเบียนเป็นเส้นที่นับและมีการแก้ไข?


ลอง "cat filename.csv | wc -l"
chaput

4
"cat filename.csv | wc -l" ทำสิ่งเดียวกันอย่างมีเหตุผลเช่นเดียวกับ "wc -l filename.csv" แต่มีประสิทธิภาพน้อยกว่าและสง่างาม
Alex

Devoloper250 คุณช่วยชี้แจงว่าย่อหน้าสุดท้ายอีกเล็กน้อย? ตัวอย่างอาจช่วยได้เช่นกัน
Alex

เช่น Iam ได้รับไฟล์ csv ที่มี 1 บันทึกที่มี * (เครื่องหมายดอกจัน) ในจุดเริ่มต้นของบรรทัด เมื่อฉันออก wc -l fn.csv iam ได้รับการนับเป็น 0 แต่ควรเป็น 1 หรือไม่ * (เครื่องหมายดอกจัน) มีสิ่งเฉพาะที่จะทำเช่นเดียวกับสัญลักษณ์อื่น ๆ หรือไม่?
Devoloper250

ผลลัพธ์คืออะไรเมื่อคุณเรียกใช้ "cat filename.csv" นอกจากนี้คุณใช้การกระจายแบบใด
JNevill

คำตอบ:


9

เคล็ดลับเพื่อให้แน่ใจว่าจะมีการนับจำนวนบรรทัดที่ไม่สิ้นสุดเช่นกัน:

cat filename.csv | xargs -l echo | wc -l

ดูเหมือนว่าจะนับบรรทัดที่ไม่ว่างทั้งหมด แต่ข้ามบรรทัดที่ว่างเปล่า

โปรดทราบว่ามันค่อนข้างจะไม่มีประสิทธิภาพ แต่นั่นอาจไม่ใช่ปัญหาสำหรับการใช้งานเป็นครั้งคราว

ความเป็นไปได้อีกประการหนึ่งนับจำนวนบรรทัดทั้งหมดรวมถึงบรรทัดสุดท้ายที่ไม่สิ้นสุด:

awk '{n+=1} END {print n}' filename.csv

ทดสอบกับ RHEL 6.2 YMMV


awkคำสั่งงานบน OS X
คาห์สตับส์

1

wc จะรายงาน 0 สำหรับไฟล์ที่มีเพียงหนึ่งบรรทัดและไม่มีการขึ้นบรรทัดใหม่ บางทีไฟล์ csv ที่บันทึกหนึ่งของคุณอาจเป็นเช่นนี้ คุณสามารถค้นหาการขึ้นบรรทัดใหม่ด้วย hexdump เช่น:

hexdump -C fn.csv

มองหารหัส ascii 0a ที่ส่วนท้าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.