的Unix - 排序文件名以一个密钥,但不知道它的位置
问题描述:
我想使用Unix的这些文件进行排序命令:的Unix - 排序文件名以一个密钥,但不知道它的位置
MyFile_fdfdsf_20140326.txt
MyFile_4fg5d6_20100301.csv
MyFile_dfgfdklm_19990101.tar.gz
我等待这里的结果MyFile_fdfdsf_20140326.txt
所以我d喜欢用最新的日期获取文件。
我不能使用'sort -k',因为键的位置(日期)可能有所不同 但是在我的文件名中,总是有两个“_”分隔符和一个点'。'。文件扩展
任何帮助,将不胜感激:)
答
然后使用-t
指示字段分隔符并将其设置为_
:
sort -t'_' -k3
见排序,如果他们的文件名的例子在一个文件中。我用-n
为数字排序,并-r
为相反的顺序:
$ sort -t'_' -nk3 file
MyFile_dfgfdklm_19990101.tar.gz
MyFile_4fg5d6_20100301.csv
MyFile_fdfdsf_20140326.txt
$ sort -t'_' -rnk3 file
MyFile_fdfdsf_20140326.txt
MyFile_4fg5d6_20100301.csv
MyFile_dfgfdklm_19990101.tar.gz
从man sort
:
更新-t,--field分离器SEP =
使用SEP代替非空白到空白转变
-n,--numeric排序
比较根据字符串数值
-r,--reverse
反转比较
的结果
谢谢你的回答。这是完美的。但出于好奇,如果 我有一个未知数量的分隔符,但日期总是在最后一个“_”分隔符 之后。 MyFile_abc_def _... 20140326.txt sort -t'' -nk ???文件 - user3464809
你可以欺骗它一点点:打印最后一个字段,排序,然后将其删除。
awk -F_ '{print $NF, $0}' a | sort | cut -d'_' -f2-
看到一个例子:
$ cat a
MyFile_fdfdsf_20140326.txt
MyFile_4fg5d6_20100301.csv
MyFile_dfgfdklm_19990101.tar.gz
MyFile_dfgfdklm_asdf_asdfsadfas_19940101.tar.gz
MyFile_dfgfdklm_asdf_asdfsadfas_29990101.tar.gz
$ awk -F_ '{print $NF, $0}' a | sort | cut -d'_' -f2-
dfgfdklm_asdf_asdfsadfas_19940101.tar.gz
dfgfdklm_19990101.tar.gz
4fg5d6_20100301.csv
fdfdsf_20140326.txt
dfgfdklm_asdf_asdfsadfas_29990101.tar.gz
是始终之后的第二'日期_'? – fedorqui
谢谢你的回答。这是完美的。 但出于好奇,如果我有一个未知数的“\ _”分隔符,但该日期总是在最后一个“\ _”分隔符之后。 MyFile_abc_def _..._ 20140326.txt sort -t'_'-nk ???文件 – user3464809
查看我更新的答案。我介绍了这个具体案例。另外,它解决了你的问题?既然你是新来的,如果你的问题已经解决了,请不要忘记标记答案。您可以点击答案旁边的复选标记将其从空心切换为绿色。如果您有任何疑问,请参阅[帮助中心>提问](http://*.com/helpcenter/someone-answers)! – fedorqui