我有这些重复行的文件,其中只有最后一个字段不同:
OST,0202000070,01-AUG-09,002735,6,0,0202000068,4520688,-1,0,0,0,0,0,55
ONE,0208076826,01-AUG-09,002332,316,3481.055935,0204330827,29150,200,0,0,0,0,0,5
ONE,0208076826,01-AUG-09,002332,316,3481.055935,0204330827,29150,200,0,0,0,0,0,55
OST,0202000068,01-AUG-09,003019,6,0,0202000071,4520690,-1,0,0,0,0,0,55
我需要删除第一次出现的行并留下第二行。
我试过了:
awk '!x[$0]++ {getline; print $0}' file.csv
但它没有按预期工作,因为它也删除了非重复的行。
答案 0 :(得分:2)
#!/bin/awk -f
{
s = substr($0, 0, match($0, /,[^,]+$/))
if (!seen[s]) {
print $0
seen[s] = 1
}
}
答案 1 :(得分:1)
作为一般策略(尽管我和Aho一起上课,但我不是一个AWK专业人士)你可能会尝试:
这不是AWK特定的,我不能轻易提供任何示例代码,但这是我首先尝试的。
答案 2 :(得分:1)
如果您的近似重复项始终相邻,则可以与上一个条目进行比较,避免创建可能很大的关联数组。
#!/bin/awk -f
{
s = substr($0, 0, match($0, /,[^,]*$/))
if (s != prev) {
print prev0
}
prev = s
prev0 = $0
}
END {
print $0
}
修改:更改了脚本,以便在一组近似重复项中打印最后一个脚本(不需要tac
)。