ฉันรู้วิธีรับความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความด้วย awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
แต่ฉันจะรับความยาวของบรรทัดที่ยาวที่สุดของไฟล์ทั้งหมดในไดเรกทอรีได้อย่างไร?
ฉันรู้วิธีรับความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความด้วย awk
awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt
แต่ฉันจะรับความยาวของบรรทัดที่ยาวที่สุดของไฟล์ทั้งหมดในไดเรกทอรีได้อย่างไร?
คำตอบ:
ทางออกที่ตรงไปตรงมาที่สุดคือการเชื่อมไฟล์ทั้งหมดและไพพ์ผลลัพธ์กับสคริปต์ของคุณ:
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 ระบุไว้ในความคิดเห็นของเขา*
จะไม่ตรงกับไฟล์ที่ซ่อนอยู่ (เริ่มต้นด้วยจุด) * .*
หากคุณต้องการผู้ใช้
ด้วย GNU wc
:
cat *.txt|wc -L
-L
พิมพ์ความยาวของบรรทัดที่ยาวที่สุด
หากคุณต้องการความยาวสูงสุดต่อไฟล์ด้วย 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 บรรทัดว่างตามลำดับดังนั้นจะไม่มีบรรทัดที่ยาวที่สุด
ด้วย GNU wc (coreutils 8.4) สามารถจัดการไฟล์ได้หลายไฟล์
wc -L *.txt
wc -L
ทำ แต่โซลูชันของคุณมีข้อเสียที่คุณต้องลุยผ่านความยาวสูงสุดของไฟล์อื่นทั้งหมดก่อน มีข้อได้เปรียบอะไรบ้าง?
cat * .* | ...
. หรือกำจัดการใช้งานที่ไร้ประโยชน์ของแมวawk '...' * .*
และพูด