我有一个很大的 CSV 文件,想要清空某些以前见过的列。
所以我有(为了说明我的问题):
Category | Subcategory
---------+------------
foo | bar
foo | bar
foo | foobar
foo | foobar
而且我要:
Category | Subcategory
---------+------------
foo | bar
|
| foobar
|
整个 CSV 已排序(使用sort --strong -k 1,2
),因此我只需要一种方法来完成一列的任务,并且稍后可以对另一列使用相同的方法。基本上:删除除第一个之外的所有出现的“foo”。
它类似于这个问题,但我不想删除完整的行..
我不知道该怎么做,因为我不太喜欢 awk。谁能帮我?
答案1
假设这是打印唯一字段的常见任务awk
awk -F"[| ]+" -v OFS=" |" '
NR==1 {
for (i=0;i<length($1);i++)
blank=" " blank
}
{
if (($1,$2) in b)
$2=""
else
b[$1,$2]=1
if ($1 in a)
$1=blank
else
a[$1]=1
print
}' large.csv