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,ExchangeTerminal=1,E1PhysPathTerm=PPS1 ;pmEs ;0
2015-12-21 09:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTerminal=1,E1PhysPathTerm=PPS1 ;pmSes ;0
2015-12-21 19:30:00;ManagedElement=1,Equipment=1,Subrack=1,Slot=27,PlugInUnit=1,ExchangeTerminal=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자리 숫자와 대시를 찾아 "연도-"를 찾습니다. - 그러니 연도 변경에 대해 걱정할 필요가 없습니다.
- 하지만 아직 정규식에 익숙하지 않고 정규식을 사용해야 할 때 정보가 없다면 입력하기가 조금 더 복잡해지고 기억하기가 더 어려워집니다.