さっき見た空の柱

さっき見た空の柱

大きなCSVファイルがあり、以前に見た特定の列を消去したいと思います。

だから私は(私の問題を説明するために)以下を持っています:

Category | Subcategory
---------+------------
foo      | bar
foo      | bar
foo      | foobar
foo      | foobar

そして私はほしい:

Category | Subcategory
---------+------------
foo      | bar
         | 
         | foobar
         |

CSV全体がソート(使用sort --strong -k 1,2)されるため、1つの列に対して操作を実行する方法のみが必要で、後で別の列に同じ方法を使用できます。デフォルトでは:最初の項目を除くすべての「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

おすすめ記事