最初の列$1
に基づいて行をマージし、出力をフォーマットしますか?ヘッダーを印刷するときに生成する必要がありますMax Unique count of first field.
たとえば、アンゴラはカウント= 3、ブラジルはカウント= 5、ザンビアはカウント= 1と表示されます。 フィールド$ 1の最大ユニークカウントは5です。したがって、ヘッダーを5回印刷してすべてのフィールドに適切なヘッダーを付ける必要があります。awkは列に基づいて行をマージする
出力を印刷している間に、original input file
の注文を維持します。 にするために使用私の実際の入力ファイルは10の分野、12枚の分野など
Input.csv
Output.csv 現在Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount,Country,Network,Details,Amount
Angola,voda,xxx,10,Angola,at&t,xxx,20,Angola,mtn,xxx,30
Brazil,voda,yyy,40,Brazil,voda,yyy,50,Brazil,at&t,yyy,60,Brazil,mtn,yyy,70,Brazil,voda,yyy,80
Zambia,tcl,zzz,90
を希望
Country,Network,Details,Amount
Angola,voda,xxx,10
Angola,at&t,xxx,20
Angola,mtn,xxx,30
Brazil,voda,yyy,40
Brazil,voda,yyy,50
Brazil,at&t,yyy,60
Brazil,mtn,yyy,70
Brazil,voda,yyy,80
Zambia,tcl,zzz,90
のように変わり、私は以下の2を使用しています実際の入力ファイルのフィールド数に基づいて、必要な出力を取得し、毎回手動でカウントを変更するコマンド。
手順:#1
awk 'BEGIN { while (count++<5) header=header "Country,Network,Details,Amount,"; print header }' > output.csv
ステップ:第2位
awk -F, '
/.+/{
if (!($1 in Val)) { Key[++i] = $1; }
Val[$1] = Val[$1] $0 ",";
}
END{
for (j = 1; j <= i; j++) {
print(Val[Key[j]]);
}
}' input.csv >> output.csv
ご提案を探しています...
|ソート '(あなたの入力データは国名でソートされているようです)?がんばろう。 – shellter
そして...小さなサンプルデータ、必要な出力、そしてうんざりしたQのためにうまくいきます。投稿と幸運を続けてください! – shellter