1
分配ID于每行我有一个列,它是通过比较每个复发例如通过柱值在AWK
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
的输出的表格文件使用第四列到下一行
使用awk可以快速执行吗?
thx求助
分配ID于每行我有一个列,它是通过比较每个复发例如通过柱值在AWK
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
的输出的表格文件使用第四列到下一行
使用awk可以快速执行吗?
thx求助
awk '$3 != current {id++; current=$3} {print $0, id}'
将输入放入文件中。
$> 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: 像乔纳森·莱弗勒说,最初的部分是不是真的有必要在这里。因此,另一种可行的解决方案是:
awk '
{
prevValue = value
value = $3
if (value != prevValue)
iterator++
print $0, iterator
}' ./text
+1:这是相当冗长;初始化部分可以被假定(你明确地做了'awk'确实隐含的)。 – 2012-03-06 20:50:08