ฉันมีไฟล์ลักษณะนี้:
FirstName, FamilyName, Address, PhoneNumber
ฉันจะจัดเรียงตาม FamilyName ได้อย่างไร
ฉันมีไฟล์ลักษณะนี้:
FirstName, FamilyName, Address, PhoneNumber
ฉันจะจัดเรียงตาม FamilyName ได้อย่างไร
คำตอบ:
ถ้านี่คือ UNIX:
sort -k 2 file.txt
คุณสามารถใช้-k
แฟล็กหลายรายการเพื่อจัดเรียงในคอลัมน์มากกว่าหนึ่งคอลัมน์ ตัวอย่างเช่นในการจัดเรียงตามชื่อสกุลจากนั้นให้ตั้งชื่อเป็นตัวตัดไท:
sort -k 2,2 -k 1,1 file.txt
ตัวเลือกที่เกี่ยวข้องจาก "man sort":
-k, --key = POS1 [, POS2]
เริ่มต้นคีย์ที่ POS1 สิ้นสุดที่ POS2 (ต้นทาง 1)
POS คือ F [.C] [OPTS] โดย F คือหมายเลขฟิลด์และ C ตำแหน่งอักขระในฟิลด์ OPTS คือตัวเลือกการสั่งซื้อด้วยตัวอักษรเดียวหรือมากกว่าซึ่งจะแทนที่ตัวเลือกการสั่งซื้อส่วนกลางสำหรับคีย์ หากไม่มีการกำหนดคีย์ให้ใช้ทั้งบรรทัดเป็นคีย์
-t, - ฟิลด์คั่น = SEP
ใช้ SEP แทนการเปลี่ยนแบบไม่เว้นว่างเป็นว่างเปล่า
--field-separator=','
กรณีที่คุณอาจมีประเภทตัวดำเนินการป้อนข้อมูลในค่า "ชื่อ" เช่น "บิลลี่บ็อบ" หรืออะไรก็ตาม ... ช่องว่างสามารถเข้าถึงข้อมูลของคุณได้อย่างง่ายดายหากคุณไม่ป้องกัน แต่ เครื่องหมายจุลภาคค่อนข้างไม่น่าเป็นไปได้
-b
ตัวเลือก นี่เป็นเพราะsort
จริงๆแล้วกำลังพิจารณาว่าสตริงที่จะจัดเรียงเริ่มต้นหลังเครื่องหมายจุลภาคไม่ใช่จากตัวอักษรตัวแรกของคอลัมน์ นอกจากนี้คุณอาจต้องนำหน้าคำสั่งด้วยLC_ALL=C
เพื่อหลีกเลี่ยงผลข้างเคียงใด ๆ เนื่องจากโลแคลซึ่งอาจเกิดขึ้นได้แม้กระทั่งในไฟล์ ASCII ธรรมดา
-b
( --ignore-leading-blanks
) เพื่อชี้แจงเล็กน้อย: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
ให้a<SPACE><SPACE>b
ก่อน (คอลัมน์ที่สองเริ่มต้นหลังจากคอลัมน์แรกnon-blank to blank transition
และ<SPACE><SPACE>b
ก่อนหน้า<SPACE>a
) แต่-b
ให้aa<SPACE>a
ตามที่คาดไว้ ( a
คือก่อนหน้าb
)
หากต้องการจัดเรียงตามฟิลด์ที่สองเท่านั้น (ดังนั้นเมื่อฟิลด์ที่สองตรงกันบรรทัดที่ตรงกันจะยังคงอยู่ในลำดับที่อยู่ในฟิลด์เดิมโดยไม่ต้องเรียงลำดับในฟิลด์อื่น):
sort -k 2,2 -s orig_file > sorted_file
FWIW นี่คือวิธีการจัดเรียงเพื่อแสดงว่ากระบวนการใดใช้หน่วยความจำที่ดีที่สุด
memstat | sort -k 1 -t':' -g -r | less
ตัวเลือกการจัดเรียงถูกตั้งค่าเป็นคอลัมน์แรกโดยใช้: เป็นตัวแยกคอลัมน์การเรียงลำดับตัวเลขและการจัดเรียงแบบย้อนกลับ
sort -nk2 file.txt
ดังนั้นคุณสามารถเปลี่ยนหมายเลขคอลัมน์