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
我试图在文件中的每一行之前添加数字,但前提是第二列(字段)中的值与前面的值不同
输入文件:
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