Linux üzerinde dosyaları sıralama


1

Bir dizinde, uzantılarından önce sayısal basamakları olan birden fazla dosya var. aşağıdaki gibi:

  • 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

etc .. Onları aşağıdaki gibi sayısal (01,03,04 vb.) ile sıralamak istiyorum:

  • 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

Bunu nasıl yapabilirim?

Yanıtlar:


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

açıklama

  • -F "_" awk'ye '_' alanını ayırıcı olarak kullandığımızı söyler
  • $NFolduğu awk'ish son alan için10.tif
  • $0olduğu awk'ish bütün girişi içinSHG_PS_RG_af_01.tif
  • yani bu '{print $NF,$0}'yazdırır10.tif SHG_PS_RG_10.tif

    Yapmamız 10.tif SHG_PS_RG_10.tifkolay olduğunda , sadece ikinci sütunu yazdırmak için sort -nkullanırız cut -f2- -d' '.


Teşekkürler ama "SHG_PS RG_10.tif" gibi dosya isimlerinde boşluklar olduğumu sormayı unuttum. bu durumda ne yapmalıyım? awk'ye bazı dosyalarda yerimiz olduğunu ve diğer dosyalarda alan ayırıcı olarak altını çizdiğimizi nasıl söyleyeceğiz. lütfen bir çözüm
Jamal

1
Ben komut ls çalıştı -1 af | tr -s '' ' ' | awk -F ' ' '{baskı $ NF, $ 0}' | sıralama -n | -f2 -d 'i kesin ve işe yaradı! :) Teşekkürler.
Jamal,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.