sort
ต้องการที่จะเห็นการป้อนข้อมูลทั้งหมดก่อนที่จะสามารถเริ่มต้นการส่งออก ด้วยเหตุนี้sort
โปรแกรมจึงสามารถเสนอตัวเลือกในการแก้ไขไฟล์แทน:
sort temp.txt -o temp.txt
โดยเฉพาะเอกสารของ GNUsort
กล่าวว่า:
โดยปกติการจัดเรียงอ่านทุกท่านก่อนที่จะเปิดเอาท์พุทไฟล์เพื่อให้คุณสามารถจัดเรียงไฟล์ได้อย่างปลอดภัยในสถานที่โดยใช้คำสั่งเหมือนและsort -o F F
cat F | sort -o F
อย่างไรก็ตามsort
ด้วย--merge
( -m
) สามารถเปิดไฟล์เอาต์พุตก่อนที่จะอ่านอินพุตทั้งหมดดังนั้นคำสั่ง like cat F | sort -m -o F - G
จึงไม่ปลอดภัยเนื่องจาก sort อาจเริ่มเขียนF
ก่อนที่cat
จะอ่านเสร็จ
ในขณะที่เอกสารของ BSD sort
กล่าวว่า:
ถ้า [the] output-file เป็นหนึ่งในอินพุตไฟล์ให้เรียงสำเนาไปยังไฟล์ชั่วคราวก่อนที่จะเรียงลำดับและเขียนเอาต์พุตไปยังไฟล์เอาต์พุต [the]
คำสั่งต่างๆเช่นuniq
สามารถเริ่มเขียนเอาต์พุตก่อนที่จะอ่านอินพุตเสร็จสิ้น โดยทั่วไปคำสั่งเหล่านี้ไม่รองรับการแก้ไขแบบแทนที่ (และจะยากกว่าสำหรับคำสั่งเหล่านี้ที่จะรองรับฟีเจอร์นี้)
โดยทั่วไปคุณจะแก้ไขปัญหานี้ด้วยไฟล์ชั่วคราวหรือหากคุณต้องการหลีกเลี่ยงการมีไฟล์กลางอย่างแท้จริงคุณสามารถใช้บัฟเฟอร์เพื่อจัดเก็บผลลัพธ์ทั้งหมดก่อนที่จะเขียนออกมา ตัวอย่างเช่นด้วยperl
:
uniq temp.txt | perl -e 'undef $/; $_ = <>; open(OUT,">temp.txt"); print OUT;'
ที่นี่ส่วน perl จะอ่านผลลัพธ์ที่สมบูรณ์จากuniq
ในตัวแปร$_
จากนั้นเขียนทับไฟล์ต้นฉบับด้วยข้อมูลนี้ คุณสามารถทำเช่นเดียวกันนี้ในภาษาสคริปต์ที่คุณเลือกหรือแม้กระทั่งใน Bash แต่โปรดทราบว่าจะต้องใช้หน่วยความจำเพียงพอที่จะจัดเก็บไฟล์ทั้งหมดจึงไม่แนะนำให้ใช้เมื่อทำงานกับไฟล์ขนาดใหญ่