Awk 对命令列表重新排序并重新编号

Awk 对命令列表重新排序并重新编号,awk,Awk,我正在尝试对以下命令块重新排序和编号,以便每个命令都遵循如下结构的编号: 0.1 0.2 .. 0.9 1.0 1.1 .. 到目前为止,我能够使用下面的命令来提取带有数字的行,但是我不确定执行重新排序+重新编号的最佳方法是什么。我能在这方面得到一些帮助吗 awk '$2 ~ /\y[0-9]+\y/' eem.txt 要过滤的输出 event manager applet monitorHealth authorization bypass event manager apple

我正在尝试对以下命令块重新排序和编号,以便每个命令都遵循如下结构的编号:

0.1
0.2
..
0.9
1.0
1.1
..
到目前为止,我能够使用下面的命令来提取带有数字的行,但是我不确定执行重新排序+重新编号的最佳方法是什么。我能在这方面得到一些帮助吗

awk '$2 ~ /\y[0-9]+\y/' eem.txt
要过滤的输出

 event manager applet monitorHealth authorization bypass
    event manager applet monitorHealth
    event syslog pattern xx maxrun 50 ratelimit 50
    action 0.1 cli command xx
    action 0.2 cli command xx
    action 0.4 cli command xx
    action 0.4 cli command xx
    action 0.4 cli command "undebug all”
    action 0.3 cli command xx
    action 0.4 cli command xx
    action 0.5 cli command xx
    action 0.6 cli command xx
    action 0.7 cli command xx
    action 0.8 cli command xx
    action 0.9 cli command xx
    action 1.1 cli command xx
    action 1.2 cli command xx
    action 1.3 cli command xx
    action 1.4 cli command xx
    action 1.5 cli command xx
    action 1.6 cli command xx
    action 1.7 cli command xx
    action 1.8 cli command xx
    action 1.9 cli command xx
    action 2.1 cli command xx
    action 2.2 cli command xx
    action 2.3 cli command xx

谢谢。

要对行重新编号,只需为新的编号设置一个计数器,对于每个匹配的行,用它替换第二列的当前值,并递增0.1

$ awk -v counter=0.1 '$2 ~ /^[0-9]+\.[0-9]$/ { $1 = "    " $1; # Keep the leading spaces
                                               $2 = sprintf("%.1f", counter);
                                               counter += 0.1 } 1' eem.txt
event manager applet monitorHealth authorization bypass
    event manager applet monitorHealth
    event syslog pattern xx maxrun 50 ratelimit 50
    action 0.1 cli command xx
    action 0.2 cli command xx
    action 0.3 cli command xx
    action 0.4 cli command xx
    action 0.5 cli command "undebug all”
    action 0.6 cli command xx
    action 0.7 cli command xx
    action 0.8 cli command xx
    action 0.9 cli command xx
    action 1.0 cli command xx
    action 1.1 cli command xx
    action 1.2 cli command xx
    action 1.3 cli command xx
    action 1.4 cli command xx
    action 1.5 cli command xx
    action 1.6 cli command xx
    action 1.7 cli command xx
    action 1.8 cli command xx
    action 1.9 cli command xx
    action 2.0 cli command xx
    action 2.1 cli command xx
    action 2.2 cli command xx
    action 2.3 cli command xx
    action 2.4 cli command xx

使用sort命令进行此操作。请发布inputBarmar-好主意。排序可以做到这一点,但是数字仍然需要重新排序。如果您检查输入文件,您将看到有重复的数字需要遵循上述编号约定。我不知道该怎么办。hek2mgl-输入文件在上面的“要过滤的输出”下指定。如果没有排序,“重新排序”是什么意思?@Shawn有些语句的编号如下:0.1、0.2、0.4、0.4、0.4等。这需要更正为0.1、0.2、0.3、0.4、0.5等。太好了,这正是我想要的。几个问题-%1.1f是否相当于printf中的%.1f?你能解释一下awk one liner}1'eem.txt最后一部分中1的意义吗?谢谢。@awk脚本末尾的用户1是一个常见的习惯用法。它是1{print}的缩写,并打印当前行。%.1f的sprintf格式只是将数字格式化为小数点后的1位数字,在本例中,1表示为1.0。