从模式

时间:2016-09-09 21:34:33

标签: bash awk grep

我的同事今天在grep遇到了一个有趣的问题。 她正在制作一个bash脚本,似乎是从那里使用curl拉出一个网页并使用grep来拉动锚点。

她的示例输出显示为:

    file-1    
    file-10
    file-2 
    file-20
    file-3
    file-4

这可以通过查看第一个数字并将它们置于“顺序”中来排序grep

她最终制作了一个for循环来从输出中获取最新信息。但它让我很好奇。

在上面的示例中,如何在一行命令中获取file-20

。我试过了sortawk。然而无法工作:/

3 个答案:

答案 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