之前看到的空列

之前看到的空列

我有一个很大的 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

相关内容