ฉันเข้าใจวิธีใช้ฟังก์ชั่น printf ของ awk แต่ฉันไม่ต้องการระบุทุกฟิลด์
ตัวอย่างเช่นสมมติว่านี่เป็นไฟล์ของฉัน:
c1|c2|c3|c4|c5
c6|c7|c8|c9|c10
c11|c12|c13|c14|c15
ฉันต้องการจัดรูปแบบเพื่อให้ทุกเขตข้อมูลแรกของระเบียนคือความกว้างของ c11 - เซลล์ที่ยาวที่สุดในเขตข้อมูลแรก:
c1 |c2|c3|c4|c5
c6 |c7|c8|c9|c10
c11|c12|c13|c14|c15
ฉันเข้าใจว่าฉันสามารถระบุ:
awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile
สมมติว่าฉันรู้ว่าฉันต้องการให้ความกว้างของคอลัมน์แรกเป็นอย่างไร แต่ฉันไม่ทราบว่ามีกี่ฟิลด์ในไฟล์ โดยทั่วไปฉันต้องการทำสิ่งที่ชอบ:
... '{printf "%-3s|", $1}'
... จากนั้นพิมพ์ส่วนที่เหลือของฟิลด์ในรูปแบบดั้งเดิม
sed 's/|/'' '' '' |/;s/\(...\) */\1/'
(ที่นี่เพิ่มราคาพิเศษเพื่อแทรก 3 ช่องว่างในขณะที่ความคิดเห็น SE บีบช่องว่างที่ต่อเนื่องกันเป็นหนึ่ง)