CSV - 特定の列を重複データを含む行に変換する

CSV - 特定の列を重複データを含む行に変換する

応答していないベンダーと協力していますが、ExcelはベンダーのCSVファイルインベントリをまったく検索できません。私たちのチームはUnixを知らないし、使用していませんが、単純なIFループ1つまたは2つとawkORを使用するとsed問題が解決することがわかります。

元のファイルは次のとおりです。

Col1 Col2    ... Col8 ..... Col30 Col31 .. Col30+N
---------------------
UPC MasterSKU ...  UnitCost ..... AltSKU1 AltSKU2 .. AltSKU_N

一部のMasterSKUにはいくつかのAltSKUがあり、一部には318があります。この最大金額は毎月変更される場合があります!

例:

UPC MasterSKU  Cost AltSKU1 AltSKU2 .... AltSKU_N
------------------------------------------------------
10000001  ABC  $5.00  ABC01 ABC001 ABC1
10000002  BCD  $2.34  BCD01 BCD.go BD.c.2 ...200 AltSKUs later... BDDCD7

私たちのチームにはExcelが必要で検索アルゴリズムが限られているので、単一の列にすべてのAltSKUを一覧表示し、コストを横に表示する必要があります。

これが私が得たい結果です:

UPC MasterSKU  Cost AltSKU
--------------------------
10000001  ABC  $5.00  ABC01
10000001  ABC  $5.00  ABC001
10000001  ABC  $5.00  ABC1
10000002  BCD  $2.34  BCD01
10000002  BCD  $2.34  BCD.go
10000002  BCD  $2.34  BCD01

 ... repeat for 200 AltSKUs

10000002  BCD  $2.34  BDDCD7

注:ABC MasterSKUで何が起こりましたか? AltSKUが3つだけなので、行も3つしかありません。空でない最初の3つのAltSKUの後には、315個の空のAltSKUがありません。

答え1

awkでこれを行う1つの方法は次のとおりです。

パスワード:

$ awk '{ for (i=4; i <= NF; i++) print $1, $2, $3, $i }' file1 

ファイル1:

10000001 ABC $5.00 ABC01 ABC001 ABC1
10000002 BCD $2.34 BCD01 BCD.go BD.c.2 BDDCD7

結果:

10000001 ABC $5.00 ABC01
10000001 ABC $5.00 ABC001
10000001 ABC $5.00 ABC1
10000002 BCD $2.34 BCD01
10000002 BCD $2.34 BCD.go
10000002 BCD $2.34 BD.c.2
10000002 BCD $2.34 BDDCD7

関連情報