我在一个目录中有多个文件,它们的扩展名前有数字。如下所示:
- 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' '
只打印出第二列。