我正在与一家反应迟钝的供应商合作,Excel 完全无法搜索该供应商的 CSV 文件库存。我的团队不了解或不使用 Unix,但我知道一两个简单的 IF 循环和awk
或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 发生了什么。由于只有 3 个 AltSKU,因此只有 3 条线路。前 3 个非空白 AltSKU 之后不存在 315 个空白 AltSKU
答案1
在 awk 中执行此操作的一种方法如下:
代码:
$ 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