CSV - 특정 열을 중복 데이터가 있는 행으로 변환

CSV - 특정 열을 중복 데이터가 있는 행으로 변환

응답하지 않는 공급업체와 협력하고 있는데 Excel에서 공급업체의 CSV 파일 인벤토리를 전혀 검색할 수 없습니다. 우리 팀은 Unix를 모르거나 사용하지 않지만 간단한 IF 루프 한두 개와 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에서 이를 수행하는 한 가지 방법은 다음과 같습니다.

암호:

$ 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

관련 정보