วิธีจัดเรียงไฟล์ตามส่วนของฟิลด์


11

ฉันต้องการเรียงลำดับไฟล์:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

และรับสิ่งนี้

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

นั่นคือเรียงลำดับตัวเลขในอักขระที่สองและตามมาของลำดับแรกของการไม่ว่างบนบรรทัด


เห็นได้ชัดว่าการแก้ไขไม่ได้เก็บรูปแบบที่ผมใช้สำหรับแฟ้ม ....
อีดิ ธ

คุณลองsortคำสั่งแล้วหรือยัง
Eric Renouf

ใช่ แต่เห็นได้ชัดว่าฉันไม่ทราบวิธีการใช้งานอย่างถูกต้อง .... ฉันพยายาม: sort -b + 0.1n -1 แต่เรียงลำดับ -n -k1,1 -k1,4 (และอื่น ๆ อีกมากมาย) แต่ไม่มี ที่ทำงาน
edith

1
คุณต้องการเรียงลำดับตามหมายเลขที่เริ่มต้นจากอักขระที่สองใช่ไหม
pfnuesel

อย่างแน่นอน ปัญหาคือว่าในไฟล์มีจำนวนของช่องว่างที่แตกต่างกันก่อนที่สนามแรก
edith

คำตอบ:


19
sort -k 1.2bn < file

เรียงลำดับเป็นจำนวนnมากบนkey โดยเริ่มต้นด้วยอักขระ2ndของฟิลด์1stโดยไม่คำนึงถึงส่วนbท้ายที่นำหน้า (และสิ้นสุดที่ส่วนท้ายของบรรทัด แต่นั่นไม่สำคัญสำหรับการเรียงลำดับตัวเลข

โปรดทราบว่าหากมีการเสมอกันระหว่างสองบรรทัดนี้:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

จากนั้นคำสั่งจะขึ้นอยู่กับการเรียงลำดับสุดท้ายที่เปรียบเทียบทั้งสองบรรทัดเป็นสตริง

ด้วยสถานที่บางแห่งช่องว่างจะถูกละเว้นในอินสแตนซ์แรกสำหรับการเปรียบเทียบสตริงในกรณีที่หนึ่ง F91 จะมาก่อน K92 ( Fเรียงลำดับก่อนหน้าK) กับคนอื่น ๆ เช่นในโลแคล C ช่องว่างจะไม่ถูกเพิกเฉยและ K92 จะมาต่อหน้า F91 หนึ่ง (เว้นวรรคก่อนหน้าF)

สำหรับการเรียงลำดับสุดท้ายที่ไม่สนใจช่องว่างนำโดยไม่คำนึงถึงสถานที่คุณสามารถทำได้:

sort -k 1.2bn -k 1b < file

ว่า1bใครจะเรียงลำดับ (ขึ้นอยู่กับความสัมพันธ์ในกุญแจดอกแรก) lexically ในส่วนของเส้นที่เริ่มต้นด้วยฟิลด์แรกไม่สนใจช่องว่างชั้นนำ

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