ค้นหาความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความทั้งหมดในไดเรกทอรี


16

ฉันรู้วิธีรับความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความด้วย awk

awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt

แต่ฉันจะรับความยาวของบรรทัดที่ยาวที่สุดของไฟล์ทั้งหมดในไดเรกทอรีได้อย่างไร?

คำตอบ:


11

ทางออกที่ตรงไปตรงมาที่สุดคือการเชื่อมไฟล์ทั้งหมดและไพพ์ผลลัพธ์กับสคริปต์ของคุณ:

cat ./* | awk '{ if ( length > L ) { L=length} }END{ print L}'

นอกจากนี้คุณยังสามารถส่งไฟล์โดยตรงไปยัง awk:

awk '{ if ( length > L ) { L=length} }END{ print L}' ./*

แน่นอนว่าอาจมีคำเตือนบางอย่างหากไฟล์อยู่ในไดเรกทอรีจริง แต่ควรเป็นอันตราย คุณอาจจะมีปัญหาใหญ่กับไฟล์ไบนารีเพราะพวกเขาไม่ได้มีแนวคิดของบรรทัด ดังนั้นเพื่อให้มีความเฉพาะเจาะจงมากขึ้นคุณสามารถทำสิ่งที่ชอบ

 awk '{ if ( length > L ) { L=length} }END{ print L}' ./*.txt

เพื่อจับคู่เฉพาะ.txtไฟล์ในไดเรกทอรีปัจจุบัน

และตามที่ @ G-Man ระบุไว้ในความคิดเห็นของเขา*จะไม่ตรงกับไฟล์ที่ซ่อนอยู่ (เริ่มต้นด้วยจุด) * .*หากคุณต้องการผู้ใช้


หรือเนื้อหาcat * .* | .... หรือกำจัดการใช้งานที่ไร้ประโยชน์ของแมวawk '...' * .*และพูด
G-Man กล่าวว่า 'Reinstate Monica'

@ G-Man แน่นอน ฉันแก้ไขคำตอบของฉันเมื่อคุณแสดงความคิดเห็น :-) ฉันพูดอย่างตรงไปตรงมามากที่สุดเพราะการต่อไฟล์กับแมวเป็นสิ่งที่ดูง่ายกว่าในตอนแรก
lgeorget

4

ด้วย GNU wc:

cat *.txt|wc -L

-L พิมพ์ความยาวของบรรทัดที่ยาวที่สุด


4

หากคุณต้องการความยาวสูงสุดต่อไฟล์ด้วย GNU awk:

find . -type f -exec awk -v l=0 '
   length>l {l=length} ENDFILE{print FILENAME ":", l; l=0}' {} +

หรือความยาวสูงสุดหนึ่งไฟล์ในทุกไฟล์:

find . -type f -size +1c -exec cat {} + |
  awk -v l=0 'length>l {l=length}; END{print l}'

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

-size +1c เป็นการเพิ่มประสิทธิภาพเป็นไฟล์ข้อความที่ว่างเปล่าหรือมีอักขระเพียงตัวเดียวที่มี 0 บรรทัดและ 1 บรรทัดว่างตามลำดับดังนั้นจะไม่มีบรรทัดที่ยาวที่สุด


มันคือไฟล์ข้อความดังนั้นพวกมันจึงลงท้ายด้วยอักขระบรรทัดใหม่ (ยกเว้นว่าว่างเปล่า)
Gilles 'หยุดความชั่วร้าย'

0

ด้วย GNU wc (coreutils 8.4) สามารถจัดการไฟล์ได้หลายไฟล์

wc -L *.txt
  • แสดงรายการความยาวของแต่ละไฟล์
  • รวมถึงให้ความยาวที่ยาวที่สุดของไฟล์ทั้งหมด

นี่เป็นสิ่งสำคัญที่คำตอบอื่น ๆกล่าวถึงwc -Lทำ แต่โซลูชันของคุณมีข้อเสียที่คุณต้องลุยผ่านความยาวสูงสุดของไฟล์อื่นทั้งหมดก่อน มีข้อได้เปรียบอะไรบ้าง?
Anthon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.