รวมไฟล์ข้อความสองไฟล์เข้าด้วยกันเพื่อเพิ่มตัวคั่นบางส่วนใช่หรือไม่


16

cat file1 file2จะรวมสองไฟล์ข้อความ แต่ถ้าฉันต้องการเพิ่มตัวคั่นบางส่วนระหว่าง********************************ฉันต้องเปิดไฟล์แรกและเพิ่มบรรทัดที่จุดสิ้นสุดหรือเปิดไฟล์ที่สองและเพิ่มบรรทัดที่ด้านบนสุดแล้วเรียกใช้catคำสั่ง? สามารถใช้คำสั่งรันคำสั่งได้หรือไม่?

คำตอบ:


17

ในbashและzshคุณสามารถทำได้:

cat file1 <(echo '********************************') file2

หรือเป็น mikeserv ระบุไว้ในความคิดเห็นของเขา (ในเปลือกใด ๆ ):

echo '********************************' | cat file1 - file2

และใน Bash ตามที่ David Z แสดงความคิดเห็น:

cat file1 - file2 <<< '********************************'

บรรทัดใหม่ใด ๆ ในไฟล์จะปรากฏขึ้น หากคุณไม่ต้องการขึ้นบรรทัดใหม่หลังจากที่ "คั่น" (เช่นในกรณีที่file2เริ่มต้นด้วยการขึ้นบรรทัดใหม่) คุณสามารถใช้เพื่อปราบปรามการขึ้นบรรทัดใหม่หลังจากที่echo -n '****'*


7
คุณสามารถทำสิ่งเดียวกันนี้ได้ในทุก ๆ เชลล์echo '**********************' |cat file - file2
mikeserv

ขอบคุณ แมวจะเพิ่มบรรทัดใหม่ระหว่างไฟล์เสมอหรือไม่?
StackExchange สำหรับทั้งหมด

1
@Tim - แน่นอนechoเสมอ
mikeserv

1
@Tim - ไม่มองอย่างนั้น แต่ดูด้วยตัวคุณเอง -printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
mikeserv

1
@Tim คุณสามารถใช้...<(echo -n '****')เพื่อระงับการขึ้นบรรทัดใหม่จาก echo catแสดงเพียงหนึ่งเมื่อไฟล์มีหนึ่ง (ในตอนท้าย)
Anthon

6

อีกวิธีหนึ่งโดยไม่ต้องใช้catเท่าที่พบจากที่นี่ ,

awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'

sed 1dไปป์สุดท้ายคือการลบบรรทัดแรกซึ่งจะมีตัวคั่น

อย่างไรก็ตามการsedใช้งานครั้งสุดท้ายสามารถหลีกเลี่ยงได้เป็นอย่างดีถ้าเราใช้คำสั่งตามที่1_CRแนะนำในความคิดเห็นของเขา

awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2

1
คุณสามารถหลีกเลี่ยงการsedเปลี่ยนawkรูปแบบเป็นFNR == 1 && NR != 1
iruvar

ขอแสดงความยินดีกับการเข้าถึง 10K!
G-Man กล่าวว่า 'Reinstate Monica'

@ G-Man ขอบคุณมาก นั่นเป็นสิ่งที่ดีสำหรับคุณที่จะแสดงความยินดี :)
Ramesh

ซึ่งช่วยให้สามารถขยายรูปแบบไฟล์ได้อย่างง่ายดาย
Paul

3

คุณยังสามารถแบ่งออกเป็นหลายคำสั่ง:

cat file1; echo '------------'; cat file2

และคุณสามารถไพพ์หรือเปลี่ยนเส้นทางโดยใช้คำสั่งกลุ่มหรือเชลล์ย่อย:

# GROUP COMMAND:
{ cat file1; echo '----------'; cat file2; } | other-command
#                                        ^ final semicolon is part of the syntax!

# SUBSHELL:
( cat file1; echo '----------'; cat file2 ) | other-command

แน่นอนคุณสามารถเขียนทับหลายบรรทัดแทนที่จะใช้เครื่องหมายอัฒภาคเหมือนปกติ และง่ายต่อการขยายไปยังไฟล์อื่นด้วยตัวคั่นอื่นเป็นต้น


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.