我的同事今天在grep
遇到了一个有趣的问题。
她正在制作一个bash脚本,似乎是从那里使用curl
拉出一个网页并使用grep
来拉动锚点。
她的示例输出显示为:
file-1
file-10
file-2
file-20
file-3
file-4
这可以通过查看第一个数字并将它们置于“顺序”中来排序grep
。
她最终制作了一个for循环来从输出中获取最新信息。但它让我很好奇。
在上面的示例中,如何在一行命令中获取file-20
?
。我试过了sort
和awk
。然而无法工作:/
答案 0 :(得分:2)
你需要:
-n
sort
标记
-t
指定列分隔符,使用-k
指定列tail -n1
像这样:
sort -n -t- -k2 input | tail -n1
答案 1 :(得分:1)
使用awk,您可以在单个命令:
中执行此操作awk -F- '$2>max{max=$2; s=$0} END{print s}' file
file-20
我们用连字符分割每一行并检查第二个字段。我们将变量max
保持为运行值以保持最大值,然后我们在$2
中获得更高的值。每当我们设置max
时,我们也会在变量s
中存储整行。在END
部分,我们只打印变量s
。
答案 2 :(得分:1)
您可以使用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-20