bash: ประยุกต์ทำบัตรเลขที่ลำดับ
มีโจทย์คือ ให้สร้างบัตรแบบเรียงเลขที่ ตั้งแต่ ๑ จนถึง ๕๐๐
ตัดสินใจใช้ bash + inkscape
เพราะง่ายดี
โดยสมมุติว่าเราได้สร้างเอกสารเป็นไฟล์ inkscape ไว้แล้ว โดยให้ตัวเลขที่จะเรียงให้มีค่าเป็น XXXX
เพื่อให้สะดวกในการใช้คำสั่ง grep
โค๊ดที่สร้างขึ้น ทำแบบง่าย ๆ คือรันตัวเลขตั้งแต่ 1-500 แต่รุ่นนี้เป็นรุ่นทดสอบ ทำแค่ 1-10 พอ ขั้นตอนคือ
- แปลงตัวเลขเป็นเลขไทย ด้วยคำสั่ง
awk
- นำไปแทนที่ในไฟล์ inkscape แล้วทำออกมาเป็นไฟล์ใหม่ ด้วยคำสั่ง
sed
- แล้วสั่งส่งออกมาเป็นไฟล์นามสกุล
png
ด้วยคำสั่งแบบบรรทัดคำสั่งของinkscape
เอง ด้วยพารามิเตอร์-e
โค๊ดมีดังนี้
$ vi runcard
#!/bin/bash FILE='card.svg' QUAN=10 MARKER='XXXX' for i in $(seq 1 $QUAN); do TNUM=`echo $i | awk '{\ gsub ("0","๐");\ gsub ("1","๑");\ gsub ("2","๒");\ gsub ("3","๓");\ gsub ("4","๔");\ gsub ("5","๕");\ gsub ("6","๖");\ gsub ("7","๗");\ gsub ("8","๘");\ gsub ("9","๙");\ print }'` sed -e "s/$MARKER/$TNUM/g" $FILE > tmp.svg inkscape -e tmp$i.png tmp.svg done
$ chmod 755 runcard
เวลาใช้งานก็สั่งรันชื่อไฟล์ runcard
เฉย ๆ จะได้ไฟล์ tmp1.png จนถึง tmp10.png ก็สามารถนำไฟล์เหล่านี้ไปพิมพ์งานได้ตามต้องการ
หมายเหตุ
ไม่แน่ใจว่า การใช้คำสั่ง awk
ตามตัวอย่าง จะสามารถเขียนได้กระชับกว่านี้หรือไม่ รบกวนผู้รู้ช่วยแนะนำด้วยครับ
- Log in to post comments
![]() |
ลิขสิทธิ์ของบทความเป็นของเจ้าของบทความแต่ละชิ้น ผลงานนี้ ใช้สัญญาอนุญาตของครีเอทีฟคอมมอนส์แบบ แสดงที่มา-อนุญาตแบบเดียวกัน 3.0 ที่ยังไม่ได้ปรับแก้ |
Comments
Re: bash: ประยุกต์ทำบัตรเลขที่ลำดับ
on 25 August, 2008 - 10:55 Permalink
น่าจะแทนสคริปต์ awk ได้ด้วย tr นะครับ
เดิมผมคิดถึงคำสั่งแบบนี้:
ดูเหมือน tr มันทำงานแบบ 8 บิตเท่านั้น ซึ่งถ้าเป็นโลแคล TIS-620 จะทำงานได้
แต่ถ้าใช้โลแคล UTF-8 ก็บิดนิดหน่อย:
Re: bash: ประยุกต์ทำบัตรเลขที่ลำดับ
on 27 August, 2008 - 19:47 Permalink
ขอบคุณครับ
ผมหาตั้งนาน ว่าใช้คำสั่ง
tr
กับ UTF-8 ยังไง :PRe: bash: ประยุกต์ทำบัตรเลขที่ลำดับ
on 30 August, 2008 - 16:08 Permalink
แจ่ม