Shell脚本自然(非字母数字)排序文件列表,增加了难度
我有一个文件列表(通过管道从Shell脚本自然(非字母数字)排序文件列表,增加了难度,shell,sorting,awk,Shell,Sorting,Awk,我有一个文件列表(通过管道从ls)。理想情况下,我希望它看起来像这样: THISPARTISALWAYSTHESAME200_1.JPG THISPARTISALWAYSTHESAME200_2.JPG THISPARTISALWAYSTHESAME200_3.JPG [...] THISPARTISALWAYSTHESAME200_9.JPG THISPARTISALWAYSTHESAME200_9_1.JPG THISPARTISALWAYSTHESAME200_9_2.JPG [...]
ls
)。理想情况下,我希望它看起来像这样:
THISPARTISALWAYSTHESAME200_1.JPG
THISPARTISALWAYSTHESAME200_2.JPG
THISPARTISALWAYSTHESAME200_3.JPG
[...]
THISPARTISALWAYSTHESAME200_9.JPG
THISPARTISALWAYSTHESAME200_9_1.JPG
THISPARTISALWAYSTHESAME200_9_2.JPG
[...]
THISPARTISALWAYSTHESAME200_9_10.JPG
THISPARTISALWAYSTHESAME200_9_11.JPG
[...]
THISPARTISALWAYSTHESAME200_9_47.JPG
THISPARTISALWAYSTHESAME200_9_48.JPG
THISPARTISALWAYSTHESAME200_9_49.JPG
THISPARTISALWAYSTHESAME200Map_001.JPG
THISPARTISALWAYSTHESAME200Map_002.JPG
我正在将此列表导入ImageMagickconvert
函数,以将其转换为PDF格式,因此,如果文件的顺序正确,那就太好了,如上所述。但是,ls
没有自然地对它们进行排序,导致1-10-11-12-2-20混乱ls-v
会自然地对它们进行排序,但会将贴图放在最开始的位置,我发现的各种awk
和sort
函数无法处理贴图位,并且会造成更有趣的混乱
我认为获取ls-v的输出并使用awk将包含字符串“map”的每一行移动到末尾可能不是那么困难,但我不知道该怎么做。
ls-v|awk'{if($0!~/map/)print$0;else-later[NR]=$0;}end{for(i=1;i您也可以通过两次调用ls
和一些:
ls -v | awk '{ if($0!~/Map/) print $0; else later[NR]=$0; } END { for (i=1; i<=NR; i++) if ( i in later ) print later[i]; }'
很漂亮,只是地图不是按数字排序的。它们总是有3位数的填充可能会有所帮助?(这些目录很糟糕,但一致)。谢谢!这非常有效,现在我将坐下来讨论一个awk引用,并尝试了解如何使用。:P+1。如果使用一些隐式规则,可以将awk脚本缩短一点,例如:/Map/{later[++j]=$0;next}1;END{for(I=1;I)
{ ls -v !(*Map*); ls -v *Map*; } | convert ...