การเรียงลำดับไฟล์บน linux


1

ฉันมีหลายไฟล์ในไดเรกทอรีที่พวกเขามีตัวเลขเป็นตัวเลขก่อนส่วนขยายของพวกเขา ชอบด้านล่าง:

  • SHG_PS_RG_10.tif
  • ABC_MFCL_NHG_PS_RG_af_04.tif
  • SHG_PS_RG_af_01.tif
  • CBC_MFCL_NHG_PS_RG_af_03.tif

ฯลฯ .. ฉันต้องการเรียงลำดับด้วยตัวเลข (01,03,04 ฯลฯ ) เช่นด้านล่าง:

  • SHG_PS_RG_af_01.tif
  • CBC_MFCL_NHG_PS_RG_af_03.tif
  • ABC_MFCL_NHG_PS_RG_af_04.tif
  • SHG_PS_RG_10.tif

ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


1
nifle@megamart ~/tmp
$ echo "SHG_PS_RG_10.tif
  ABC_MFCL_NHG_PS_RG_af_04.tif
  SHG_PS_RG_af_01.tif
  CBC_MFCL_NHG_PS_RG_af_03.tif" > foo.txt

nifle@megamart ~/tmp
$ awk -F "_" '{print $NF,$0}' foo.txt  | sort -n | cut -f2- -d' '

SHG_PS_RG_af_01.tif
CBC_MFCL_NHG_PS_RG_af_03.tif
ABC_MFCL_NHG_PS_RG_af_04.tif
SHG_PS_RG_10.tif

คำอธิบาย

  • -F "_" บอก awk ว่าเราใช้ '_' เป็นตัวคั่นฟิลด์
  • $NFเป็นawk'ishสำหรับเขตที่ผ่านมา10.tif
  • $0เป็นawk'ishสำหรับการป้อนข้อมูลทั้งหมดSHG_PS_RG_af_01.tif
  • ดังนั้นนี่'{print $NF,$0}'พิมพ์10.tif SHG_PS_RG_10.tif

    เมื่อเรามี 10.tif SHG_PS_RG_10.tifเรื่องง่ายที่จะทำsort -nแล้วเราcut -f2- -d' 'จะพิมพ์คอลัมน์ที่สองเท่านั้น


ขอบคุณ แต่ฉันลืมถามว่าฉันมีช่องว่างในชื่อไฟล์เช่น "SHG_PS RG_10.tif" ในกรณีนี้ฉันควรทำอย่างไร เราจะบอกได้อย่างไรว่าในบางไฟล์เรามีพื้นที่ว่างและในไฟล์อื่นเรามีขีดล่างเป็นตัวคั่นฟิลด์ กรุณาเสนอวิธีแก้ปัญหา
Jamal

1
ฉันลองคำสั่ง ls -1 af | tr -s '' ' ' | awk -F ' ' '{พิมพ์ $ NF, $ 0}' | เรียง -n | ตัด -f2 -d 'และใช้งานได้! :) ขอบคุณ
Jamal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.