awk 条件行编号

awk conditional line numbering

我试图在文件中的每一行之前添加数字,但前提是第二列(字段)中的值与前面的值不同

输入文件:

11:10PM *Jane> login
11:15PM *Bob>  login
11:16PM *Bob>  logout
11:45PM *Betty> login
01:20AM *John>  login

输出:

1. 11:10PM *Jane> login
2. 11:15PM *Bob>  login
   11:16PM *Bob>  logout
3. 11:45PM *Betty> login
4. 01:20AM *John> login

利用变量在 awk 中具有默认值的事实:

{
  if (last == ) {
    printf("    %s\n", [=10=])
  } else {
    n += 1;
    last = ;
    printf("%2d. %s\n", n, [=10=]);
  }
}

这使用 n 来记住已看到的条目数,并使用 last 来记住最后看到的条目。

$ awk '{print (seen[]++ ? "   " : sprintf("%2d.",++cnt)), [=10=]}' file
 1. 11:10PM *Jane> login
 2. 11:15PM *Bob>  login
    11:16PM *Bob>  logout
 3. 11:45PM *Betty> login
 4. 01:20AM *John>  login