สร้างไฟล์ต่อไปนี้:
add_conf.awk
:
BEGIN {FS=","}
NF!=7 {bad=1; exit 1}
{print}
END {if (!bad) print "1/1/1970,,propertyName,\"Description of the Config\",\"false\",,1"}
add_conf.sh
:
#!/bin/sh
tempfile=$(mktemp)
for f
do
if awk -f add_conf.awk "$f" > "$tempfile"
then
cp "$tempfile" "$f"
fi
done
rm "$tempfile"
chmod +x add_conf.sh
และทำ (แน่นอนคุณสามารถวางไฟล์เหล่านี้ไว้ที่อื่นที่ไม่ใช่ไดเรกทอรีปัจจุบันเพียงปรับการอ้างอิงชื่อไฟล์ตามนั้น) จากนั้นทำ
find . -name config.csv -type f -exec ./add_conf.sh {} +
find
คำสั่งจะพบไฟล์ธรรมดาชื่อทั้งหมดconfig.csv
และผ่านชื่อ (เส้นทาง) add_conf.sh
ของพวกเขาไป สคริปต์นั้นเรียกใช้awk
ไฟล์แต่ละไฟล์โดยเขียนเอาต์พุตไปยังไฟล์ชั่วคราว หากawk
กระบวนการรายงานความสำเร็จสคริปต์จะคัดลอกเอาต์พุตกลับไปยังไฟล์อินพุต
awk
สคริปต์add_conf.awk
ชุดคั่นฟิลด์ (FS) เพื่อจุลภาค (ซึ่งเป็นสิ่งที่เห็นได้ชัดจะทำอย่างไรเมื่อต้องรับมือกับไฟล์คั่นด้วยเครื่องหมายจุลภาค) หากพบบรรทัดที่มีฟิลด์อื่นที่นอกเหนือจากเจ็ดฟิลด์ (คั่นด้วยเครื่องหมายจุลภาค) จะตั้งbad
ค่าสถานะและออกด้วยสถานะ 1 ดังนั้นเชลล์สคริปต์จะเห็นว่าไฟล์นี้ไม่มีคุณสมบัติที่เหมาะสมและจะปล่อยให้อยู่คนเดียว มิฉะนั้นจะพิมพ์บรรทัดอินพุตแต่ละบรรทัดไปยังไฟล์เอาต์พุต (ชั่วคราว) มันจะเพิ่มขึ้นบรรทัดใหม่ให้กับบรรทัดสุดท้ายหากจำเป็น จากนั้นหากไฟล์ตกลงจนถึงจุดสิ้นสุดให้เพิ่มบรรทัดข้อมูลใหม่
หมายเหตุ:
- ดังกล่าวข้างต้นถูกเขียนขึ้นสำหรับ
awk
GNU POSIX awk
ไม่ได้ระบุพฤติกรรมสำหรับข้อมูลอินพุตที่ไม่ได้ลงท้ายด้วย newline และไม่สนับสนุนexit
คำสั่ง
- ฉันไม่สนใจสัญลักษณ์ข้อที่สามของคุณ“ ถ้าคุณสมบัตินั้นไม่มีอยู่ให้เพิ่มอีกหนึ่งไฟล์ที่ส่วนท้ายของไฟล์” อาจเพิ่มได้อย่างง่ายดายหากคุณชี้แจงว่าคุณหมายถึงอะไร