csv 파일의 행을 열로 변환하는 방법은 무엇입니까? [폐쇄]

csv 파일의 행을 열로 변환하는 방법은 무엇입니까? [폐쇄]
2015-12-2119:30:00;ManagedElement=1,Equipment=1,Subrack=1

;pmEs
;0

이 결과가 필요해요

2015-12-2119:30:00;ManagedElement=1,Equipment=1,Subrack=1;pmEs;0

댓글의 추가 데이터:

2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmEs ;0
2015-12-21 09:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmSes ;0
2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTer‌​minal=1,E1PhysPathTerm=PPS1 ;pmUas ;900

답변1

귀하의 예가 각각... 으로 시작하는 일종의 로그의 많은 레코드 중 하나일 수 있는 것처럼 보인다면 2015-다음과 같은 빠른 접근 방식을 시도해 볼 수 있습니다.

tr -d '\n' < input.csv | sed 's/2015-/\n2015-/g' > output.csv

설명하다

  • 여기에는 input.csv원하는 내용이 항상 2015-다음으로 시작하는 예와 유사한 줄이 포함되어 있습니다.
  • tr -d '\n'새 줄을 삭제합니다. 따라서 모든 새 줄을 일시적으로 삭제합니다.
  • < input.csv프로그램이 읽을 수 input.csv있도록 표준 입력 에 내용을 입력합니다.tr
  • sed그런 다음 검색을 사용 2015-하고 이전 새 줄로 바꾸어 2015-원하는 줄을 얻습니다. 그렇지 않으면 입력이 로그에서 나오는 것처럼 보이고 로그에 여러 항목/레코드가 있는 경우가 많습니다. 이는 tr -d '\n'모든 다른 타임스탬프 항목을 하나의 거대한 연속 선으로 병합하고 개별 타임스탬프 항목을 식별할 수 없게 합니다. . 따라서 이를 사용하여 sed인식된 레코드 구분 기호를 검색 2015-하고 그 앞에 새 줄을 추가하여 최종 출력에 한 줄에 하나의 레코드가 있는지 확인합니다.
  • > output.csv결과를 다음에 저장output.csv
  • 물론, 2015-기록이 연말에 시작되지 않으면 작동하지 않습니다. 곧 종료되므로 2016-내년을 2016년으로 수정해야 합니다.

더 발전된 버전

또는:

tr -d '\n' < input.csv | sed 's/\([[:digit:]]\{4\}\)-/\n\1-/g' > output.csv
  • 동일하게 작동하지만 sed기본 정규 표현식을 사용하여 4자리 숫자와 대시를 찾아 "연도-"를 찾습니다.
  • 그러니 연도 변경에 대해 걱정할 필요가 없습니다.
  • 하지만 아직 정규식에 익숙하지 않고 정규식을 사용해야 할 때 정보가 없다면 입력하기가 조금 더 복잡해지고 기억하기가 더 어려워집니다.

관련 정보