在 Linux 上对文件进行排序

在 Linux 上对文件进行排序

我在一个目录中有多个文件,它们的扩展名前有数字。如下所示:

  • 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尴尬的对于最后一个字段10.tif
  • $0尴尬的对于整个输入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' '只打印出第二列。

相关内容