大きな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