我的同事今天在grep上遇到了一个有趣的问题。她正在制作一个bash脚本,它似乎是在使用curl从那里拉一个网页,并使用grep来拉锚。
她的示例输出结果如下:
file-1
file-10
file-2
file-20
file-3
file-4这是预期的,因为grep排序,看到第一个数字,并将其按其“顺序”。
最后,她做了一个循环,从输出中获取最新的信息。但这让我很好奇。
在上面的示例中,如何在一行命令中获得file-20
。我试过sort和awk。然而,无法工作:/
发布于 2016-09-09 21:37:33
你需要:
-n标志表示sort-t指定列分隔符,使用-k指定列tail -n1获取最后一行如下所示:
sort -n -t- -k2 input | tail -n1发布于 2016-09-09 21:37:14
使用awk,您可以在单命令中执行此操作。
awk -F- '$2>max{max=$2; s=$0} END{print s}' file
file-20我们用连字符分隔每一行,检查第二个字段。我们将变量max作为运行值来保持最大值,然后在$2中得到更高的值。每次设置max时,我们都会将全行存储在变量s中。在END部分中,我们只打印变量s。
发布于 2016-09-09 21:39:06
您可以使用sort按-分隔的第二个字段进行排序,并使用head -1获得第一个字段:
sort -t'-' -k2,2rn | head -1示例:
% cat file.txt
file-1
file-10
file-2
file-20
file-3
file-4
% sort -t'-' -k2,2rn file.txt
file-20
file-10
file-4
file-3
file-2
file-1
% sort -t'-' -k2,2rn file.txt | head -1
file-20https://stackoverflow.com/questions/39420034
复制相似问题