ฉันมีอินพุต (สมมุติว่าไฟล์) ในแต่ละบรรทัดจะมีชื่อไฟล์ ฉันจะอ่านไฟล์นี้และแสดงเนื้อหาสำหรับแต่ละไฟล์ได้อย่างไร
ฉันมีอินพุต (สมมุติว่าไฟล์) ในแต่ละบรรทัดจะมีชื่อไฟล์ ฉันจะอ่านไฟล์นี้และแสดงเนื้อหาสำหรับแต่ละไฟล์ได้อย่างไร
คำตอบ:
สิ่งนี้จะทำ:
xargs cat <filenames.txt
xargs
โปรแกรมอ่านเข้ามาตรฐานของตนและแต่ละบรรทัดของการป้อนข้อมูลรันcat
โปรแกรมกับเส้นที่นำเข้าเป็นอาร์กิวเมนต์ (s)
หากคุณต้องการทำสิ่งนี้เป็นวงคุณสามารถ:
for fn in `cat filenames.txt`; do
echo "the next file is $fn"
cat $fn
done
"foreach" ไม่ใช่ชื่อสำหรับทุบตี มันเป็นเพียง "สำหรับ" คุณสามารถทำสิ่งต่าง ๆ ในบรรทัดเดียวเท่านั้นเช่น:
for fn in `cat filenames.txt`; do cat "$fn"; done
การอ้างอิง: http://www.cyberciti.biz/faq/linux-unix-bash-for-loop-one-line-command/
xargs --arg-file inputfile cat
นี่จะเอาท์พุทชื่อไฟล์ตามด้วยเนื้อหาของไฟล์:
xargs --arg-file inputfile -I % sh -c "echo %; cat %"
คุณอาจต้องการจัดการช่องว่างในชื่อไฟล์ของคุณน่ารังเกียจแม้ว่ามันจะเป็น :-)
ดังนั้นฉันจะเลือกเริ่มต้นสำหรับบางสิ่งเช่น:
pax> cat qq.in
normalfile.txt
file with spaces.doc
pax> sed 's/ /\\ /g' qq.in | xargs -n 1 cat
<<contents of 'normalfile.txt'>>
<<contents of 'file with spaces.doc'>>
pax> _
cat `cat filenames.txt`
จะทำเคล็ดลับ
หากพวกเขาทั้งหมดมีนามสกุลเดียวกัน (เช่น. jpg) คุณสามารถใช้สิ่งนี้:
for picture in *.jpg ; do
echo "the next file is $picture"
done
(วิธีนี้ยังใช้งานได้หากชื่อไฟล์มีช่องว่าง)