다음과 같은 CSV 파일이 있습니다.
+------------+--------------+
| Category I | Sub-Category |
+------------+--------------+
| 1144 | 128 |
| 1144 | 128 |
| 1000 | 100 |
| 1001 | 100 |
| 1002 | 100 |
| 1002 | 100 |
| 1011 | 102 |
| 1011 | 102 |
| 1011 | 102 |
| 1011 | 102 |
| 1011 | 102 |
| 1011 | 102 |
| 1013 | 103 |
| 1013 | 103 |
| 1013 | 103 |
| 1013 | 103 |
| 1013 | 103 |
| 1013 | 103 |
| 1013 | 103 |
+------------+--------------+
위의 첫 번째 열과 두 번째 열을 연결하여 다음과 같이 새로운 임의 헤더가 있는 새로운 세 번째 열을 형성하고 싶습니다.
+-------------+--------------+-----------------------+
| Category ID | Sub-Category | Arbitrary New Heading |
+-------------+--------------+-----------------------+
| 1144 | 128 | 1144128 |
| 1144 | 128 | 1144128 |
| 1000 | 100 | 1000100 |
| 1001 | 100 | 1001100 |
| 1002 | 100 | 1002100 |
| 1002 | 100 | 1002100 |
| 1011 | 102 | 1011102 |
| 1011 | 102 | 1011102 |
| 1011 | 102 | 1011102 |
| 1011 | 102 | 1011102 |
| 1011 | 102 | 1011102 |
| 1011 | 102 | 1011102 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
| 1013 | 103 | 1013103 |
+-------------+--------------+-----------------------+
제가 아는 한 제가 자주 사용하는 유틸리티인 csvkit은 이를 달성할 수 있는 방법이 없습니다.https://github.com/wireservice/csvkit/issues/930.
고급 프로그래밍 지식이 필요하지 않고 이를 달성할 수 있는 간단한 솔루션은 무엇입니까?
나는 awk와 sed가 잠재적인 솔루션이라는 것을 막연히 알고 있지만 더 나은(즉, 더 간단한) 솔루션이 있는 경우를 대비해 쿼리를 이들로 제한하고 싶지 않습니다.
이 솔루션은 매우 큰 파일(즉, 120,000줄 이상 포함)에 작동해야 합니다.
편집: 여기에서 다운로드하려는 사람들의 편의를 위해 샘플 데이터를 포함했습니다.https://www.dropbox.com/s/achtyxg7qi1629k/category-subcat-test.csv?dl=0
답변1
밀러 사용(https://github.com/johnkerl/miller) 및 이 샘플 입력 파일
Category ID,Sub-Category
1001,128
1002,127
1002,126
1004,122
그리고 달리는 중
mlr --csv put -S '$fieldName=${Category ID}." ".${Sub-Category}' input.csv >output.csv
당신은 할 것
+-------------+--------------+-----------+
| Category ID | Sub-Category | fieldName |
+-------------+--------------+-----------+
| 1001 | 128 | 1001 128 |
| 1002 | 127 | 1002 127 |
| 1002 | 126 | 1002 126 |
| 1004 | 122 | 1004 122 |
+-------------+--------------+-----------+
csvsql을 실행할 수도 있으며 다음과 같이 작동합니다.
csvsql -I --query 'select *,("Category ID" || " " || "Sub-Category") fieldname from input' input.csv >output.csv
답변2
주문하다
Tried with below command
awk 'NR>1{print $1,$2,$1$2 }' file| sed '1i Category Sub-Category New Heading'
산출
Category Sub-Category New Heading
1144 128 1144128
1144 128 1144128
1000 100 1000100
1001 100 1001100
1002 100 1002100
1002 100 1002100
1011 102 1011102
1011 102 1011102
1011 102 1011102
1011 102 1011102
1011 102 1011102
1011 102 1011102
1013 103 1013103
1013 103 1013103
1013 103 1013103
1013 103 1013103
1013 103 1013103
1013 103 1013103