我想将.csv中所有重复的名称更改为唯一的,但在找到重复的名称后,我无法到达上一行,因为它已经被打印出来了。我曾尝试将所有行保存在数组中并在End部分打印它们,但它不起作用,而且我不知道如何访问此数组中的特定字段(awk不支持二维数组?)
样本输入
...,9,phone,...
...,43,book,...
...,27,apple,...
...,85,hook,...
...,43,phone,...
期望输出
...,9,phone9,...
...,43,book,...
...,27,apple,...
...,85,hook,...
...,43,phone43,...
我的尝试($2 - id字段,$3 - name字段)
BEGIN{
FS=","
OFS=","
marker=777
}
{
if (names[$3] == marker) {
$3 = $3 $2
#Attempt to change previous duplicate
results[nameLines[$3]]=$3 id[$3]
}
names[$3] = marker
id[$3] = $2
nameLines[$3] = NR
results[NR] = $0
}
END{
#it prints some numbers, not saved lines
for(result in results)
print result
}
2条答案
按热度按时间lndjwyie1#
以下是将所有记录存储在缓冲区中的单次传递
awk
:qni6mghb2#
这可以很容易地在
awk
中的2遍Input_file中完成,我们不需要在其中创建2维数组。输出如下: