我有一个包含文件路径和文件名的文件,我想从字符串末尾开始排序。
我的文件包含如下列表:
/Volumes/Location/Workers/Andrew/2015-08-12_Andrew_PC/DOCS/3177109.doc
/Volumes/Location/Workers/Andrew/2015-09-17_Andrew_PC/DOCS/2130419.doc
/Volumes/Location/Workers/Bill/2016-03-17_Bill_PC/DOCS/1998816.doc
/Volumes/Location/Workers/Charlie/2016-07-06_Charlie_PC/DOCS/4744123.doc
我想对此列表进行排序,使文件名是顺序的,这有助于根据文件名查找重复项,无论路径如何。
列表应如下所示:
/Volumes/Location/Workers/Bill/2016-03-17_Bill_PC/DOCS/1998816.doc
/Volumes/Location/Workers/Andrew/2015-09-17_Andrew_PC/DOCS/2130419.doc
/Volumes/Location/Workers/Andrew/2015-08-12_Andrew_PC/DOCS/3177109.doc
/Volumes/Location/Workers/Charlie/2015-07-06_Charlie_PC/DOCS/4744128.doc
答案 0 :(得分:3)
这是一种方法:
sed -e 's|^.*/\(.*\)$|\1\t\0|' list.txt | sort | cut -f 2-
这使用sed
将文件名的副本插入每行的开头,以便我们可以使用sort
对列表进行排序。然后我们删除我们在第一步中添加的内容。
答案 1 :(得分:2)
这应该有效:
sort -t/ -k7 input_file
答案 2 :(得分:1)
这将根据动态的最后一个字段进行排序,该字段由/
分隔。
首先,它会将最后一个字段追加到行的开头,然后sort
。先前附加的第一个字段将被第二个awk
删除。
awk -F'/' '{ $0= $NF " " $0;print $0 |"sort -k1"}' fil |awk '{print $2}'
/Volumes/Location/Workers/Bill/2016-03-17_Bill_PC/DOCS/1998816.doc
/Volumes/Location/Workers/Andrew/2015-09-17_Andrew_PC/DOCS/2130419.doc
/Volumes/Location/Workers/Andrew/2015-08-12_Andrew_PC/DOCS/3177109.doc
/Volumes/Location/Workers/Charlie/2016-07-06_Charlie_PC/DOCS/4744123.doc