我有一个表格文件,其中的列是重复示例
toto tata AFG
fff ddd AFG
ff hhh AWM
qqq ttt AWM
我希望有一个像
这样的输出toto tata AFG 1
fff ddd AFG 1
ff hhh AWM 2
qqq ttt AWM 2
使用第4列比较每一行与下一行
是否可以使用awk快速完成?
请求帮助
答案 0 :(得分:5)
awk '$3 != current {id++; current=$3} {print $0, id}'
答案 1 :(得分:1)
将输入放在文件中。
$> cat ./text
toto tata AFG
fff ddd AFG
ff hhh AWM
qqq ttt AWM
对于每一行,我们应该记住$ 3-st值并检查它是否等于前一行。如果是真的 - 我们应该增加迭代器。
awk '
BEGIN {
prevValue = "";
value = "";
iterator = 0;
}
{
prevValue = value;
value = $3;
if (value != prevValue)
iterator++;
printf $0 " " iterator "\n"
}' ./text
所以我们得到的是这个
toto tata AFG 1
fff ddd AFG 1
ff hhh AWM 2
qqq ttt AWM 2
<强> UPD 强>: 就像Jonathan Leffler所说,初始部分在这里并不是必需的。所以另一个可行的解决方案是:
awk '
{
prevValue = value
value = $3
if (value != prevValue)
iterator++
print $0, iterator
}' ./text