繁体   English   中英

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 == $2) {
    printf("    %s\n", $0)
  } else {
    n += 1;
    last = $2;
    printf("%2d. %s\n", n, $0);
  }
}

它使用n来记住已看到多少个条目, 最后一次则记住最近一次看到的条目。

$ awk '{print (seen[$2]++ ? "   " : sprintf("%2d.",++cnt)), $0}' 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM