awk目录序列的最大值

时间:2016-01-28 04:31:00

标签: bash awk

我正在尝试使用awk在目录后缀中找到最大值。目录名为:dir。{1,2,3,4,5,6,7,8,9,10,11,12,13等}。我的最佳尝试是将“9”作为最高值返回,可能是因为它在“青少年”之后列出。

我能做的最好的事情是将目录列表输出到临时文件并对其运行awk。是否有更好的方法可以使用awk找到dir。*后缀中的最大值?我想避免创建一个临时文件,只使用'ls -1'或类似的输入。

我感兴趣的目录:

$ ls -1
dir.1
dir.10
dir.11
dir.12
dir.13
dir.14
dir.15
dir.2
dir.3
dir.4
dir.5
dir.6
dir.7
dir.8
dir.9

我的awk命令和输出:

$ awk 'BEGIN {max = 0} {if ($1>max) max=$1} END {print max}' DATA
dir.9

我希望那个结果是“dir.15”。

1 个答案:

答案 0 :(得分:2)

当您比较awk中不是数字的两个字符串时,它会按字母顺序进行比较。所以你需要比较实际的数字。

awk -F. '$NF+0>max{max=$NF;maxline=$0}END{print maxline}'

-F.将字段分隔符设置为.,以便$NF(最后一个字段的值)将是最后一个(或唯一)点后面的数字。如果它不是数字,我们加0。这将迫使它成为一个数字,将任何不以数字开头的字符串转换为0。

无需初始化max,因为作为未初始化的变量,它在数值上等于0。

另外,正如@triplee在评论中指出的那样,不需要临时文件,因为您可以直接将ls -d传送到上面的awk行,假设没有目录有新行在它的名字:

ls -d | awk -F. '$NF+0>max{max=$NF;maxline=$0}END{print maxline}'