Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell脚本自然(非字母数字)排序文件列表,增加了难度_Shell_Sorting_Awk - Fatal编程技术网

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
我正在将此列表导入ImageMagick
convert
函数,以将其转换为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 ...