2014-12-31 2 views
1

bash에서 다음 프로세스를 수행 할 수 있습니까?CSV 파일 끝에 특정 열 추가

"Id";"Vzor";"Name";"Number";"Number2";"Ship" 
"00041534";"MGKHTYE";"2014 TREK TYAX EXPERT, GREY/YELLOW";"100";"100,30";"A" 
"00041535";"MGKHTYE";"2014 TREK TYAX EXPERT 29 , BLACK/RED";"100";"453,30";"A" 
"00041531";"MGKHTYSP";"2014 OPS TYAX SPORT, WHITE/GREY";"100,90";"306,60";"A" 
"00046024";"MGKFAR";"2015 OPS ARGUS, DARK TEAL";"899,90";"100,90";"A" 
"00046088";"MGKHFB";"2015 TREK FIREBALL 24 , BLACK";"100,90";"239,90";"A" 
"00046026";"MGKHFB";"2015 OPS FIREBALL 26 , BLUE";"100,90";"359,90";"A" 

"카테고리"및 개별 행이 그 열의 3 열에서 처음 두 단어를 추가하려면 (내가 할 수없는 것을()이 될 것이다 카테고리 이름)라는 이름의 첫 번째 행에 열을 추가 :

"Id";"Vzor";"Name";"Number";"Number2";"Ship";"Category" 
"00041534";"MGKHTYE";"2014 TREK TYAX EXPERT, GREY/YELLOW";"100";"100,30";"A";"2014 TREK" 
"00041535";"MGKHTYE";"2014 TREK TYAX EXPERT 29 , BLACK/RED";"100";"453,30";"A";"2014 TREK" 
"00041531";"MGKHTYSP";"2014 OPS TYAX SPORT, WHITE/GREY";"100,90";"306,60";"A";"2014 OPS" 
"00046024";"MGKFAR";"2015 OPS ARGUS, DARK TEAL";"899,90";"100,90";"A";"2015 OPS" 
"00046088";"MGKHFB";"2015 TREK FIREBALL 24 , BLACK";"100,90";"239,90";"A";"2015 TREK" 
"00046026";"MGKHFB";"2015 OPS FIREBALL 26 , BLUE";"100,90";"359,90";"A";"2015 OPS" 

배시 파워!

답변

5

이 awk 명령을 사용할 수

awk 'BEGIN{FS=OFS=";"} 
    NR==1{print $0,"\"Category\"";next} { 
    split($3, a, " "); 
    printf "%s%s%s %s\"\n", $0, OFS, a[1], a[2] 
}' file 

"Id";"Vzor";"Name";"Number";"Number2";"Ship";"Category" 
"00041534";"MGKHTYE";2014 TREK TYAX EXPERT, GREY/YELLOW;"100";"100,30";"A";"2014 TREK" 
"00041535";"MGKHTYE";2014 TREK TYAX EXPERT 29 , BLACK/RED;"100";"453,30";"A";"2014 TREK" 
"00041531";"MGKHTYSP";2014 OPS TYAX SPORT, WHITE/GREY;"100,90";"306,60";"A";"2014 OPS" 
"00046024";"MGKFAR";2015 OPS ARGUS, DARK TEAL;"899,90";"100,90";"A";"2015 OPS" 
"00046088";"MGKHFB";2015 TREK FIREBALL 24 , BLACK;"100,90";"239,90";"A";"2015 TREK" 
"00046026";"MGKHFB";2015 OPS FIREBALL 26 , BLUE;"100,90";"359,90";"A";"2015 OPS" 

설명 :

  • BEGIN{FS=OFS=";"} 기록 # 1 만
  • 에게이 블록을 실행 ;
  • NR==1로 설정 입출력 필드 분리
  • {print $0,"\"Category\"";next} 프린트하기 RD 공백에 의해 분할 필드 # 3 문자 텍스트 "Category"
  • split($3, a, " ") 개별 단어 배열 a을 채우는
  • printf 인쇄, 배열 a
+0

WOW에서 2 개 첫 번째 단어를 복용하여 출력 포맷 감사합니다. 새롭게 삽입 된 데이터가 새로운 행에 삽입되고 이것이 CSV 구조를 깨뜨리는 것은 거의 문제가되지 않습니다. https://www.dropbox.com/s/ekt3yudgkcwta2r/Screenshot%202014-12-31%2006.18.14.png?dl=0 – Adrian

+1

내가 대답 한 내용은 awk 명령에서 직접 복사/붙여 넣기였으며 전에 개행 문자가 없습니다. 마지막 열. csv 파일에 DOS 줄이 있습니까? 'cat -vte input.csv' 명령으로 확인하십시오. '^ M'이 끝날 때마다'dos2unix' 명령을 실행하여 유닉스 줄 끝으로 변환해야합니다. – anubhava

+1

@ 애드 리안, 줄 끝이 문제가 아닐 경우 다른 시도는 'awk'의 다른 버전을 실행하는 것입니다. 일반적인 것들은'awk','gawk','mawk','nawk'입니다. 다른 장치가 설치되어 있는지 확인하십시오. 'gawk '는 일반적으로 사용되는 "큰 정교한"버전입니다. – piojo