다음 4줄이 있습니다.
EXTRACT ETEST Last Started 2016-03-20 20:56 Status RUNNING
Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT PTEST Initialized 2016-03-31 06:25 Status STOPPED
Checkpoint Lag 00:00:00 (updated 02:21:09 ago)
나는 그것들을 다음과 같이 두 줄로 나누고 싶습니다.
EXTRACT ETEST Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT PTEST Initialized 2016-03-31 06:25 Status STOPPED Checkpoint Lag 00:00:00 (updated 02:21:09 ago)
나는 그것을 만들 수 있습니다 cat /tmp/glog.lst|xargs -n 14
:
EXTRACT ETEST Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT PTEST Initialized 2016-03-31 06:25 Status STOPPED Checkpoint Lag 00:00:00 (updated 02:21:09 ago)
그러나 row1에는 14개의 필드가 있고 row2에는 13개의 필드가 있습니다.
문제는 row2가 "Last Start"로 초기화되었다는 것입니다.
14개 미만의 열에서 14개의 열로 행을 만들고, "N"(또는) 무언가로 더미 열을 설치하여 14개의 열을 갖게 하여 스크립트로 쉽게 처리할 수 있도록 하고 싶습니다.
나도 결국 하고 싶어
EXTRACT ETEST Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT PTEST Initialized N 2016-03-31 06:25 Status STOPPED Checkpoint Lag 00:00:00 (updated 02:21:09 ago)
이게 내가 필요한 거야
$ awk '{ if (FNR%2==1) tmp=$0; else print tmp,$0 }' /tmp/gglog.lst
EXTRACT ETEST1 Initialized 2016-03-20 20:56 Status STOPPED Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT ETEST2 Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT ETEST3 Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT PTEST1 Last Started 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
EXTRACT PTEST0 Last Started 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:05 ago)
이제 초기화/마지막/시작됨 열 값을 꺼내서 다음과 같이 보이도록 하고 싶습니다.
EXTRACT ETEST1 2016-03-20 20:56 Status STOPPED Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT ETEST2 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT ETEST3 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT PTEST1 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
EXTRACT PTEST0 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:05 ago)
아니면 "초기화"를 중단하여 "즉시 초기화"할 수 있습니까? 우리가 보관한 행이 초기화되었든 이를 "지금 초기화"로 분류하고 싶습니다.
EXTRACT ETEST1 Init Now 2016-03-20 20:56 Status STOPPED Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT ETEST2 Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:04 ago)
EXTRACT ETEST3 Last Started 2016-03-20 20:56 Status RUNNING Checkpoint Lag 00:00:02 (updated 00:00:09 ago)
EXTRACT PTEST1 Last Started 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:02 ago)
EXTRACT PTEST0 Last Started 2016-03-29 08:46 Status RUNNING Checkpoint Lag 00:00:00 (updated 00:00:05 ago)
답변1
2개씩 병합하려면:
awk '{ if(FNR%2==1) tmp=$0; else print tmp,$0 }' tmp/glog.lst
Initialized
다음으로 교체Init Now
:sed 's/Initialized/Init Now/' tmp/glog.lst
두 작업을 동시에 수행하려면 파이프를 사용하여 연결하세요.
awk '{ if(FNR%2==1) tmp=$0; else print tmp,$0 }' tmp/glog.lst | sed 's/Initialized/Init Now/'
답변2
제목 질문에 대답하려면 다음을 사용하여 연속된 줄을 연결할 수 있습니다 sed
.
sed 'N;s/\n/ /' /tmp/glog.lst
그러나 귀하의 열 질문은 실제로 완전히 별도의 질문입니다. 이것최고해결책은,상류로 헤엄치다glog.lst
파일을 생성하고 만드는 도구에합리적인 구분 기호를 사용하세요공백 대신.
완전히 불가능한 경우에는 문제를 해결할 수 있지만 다른 모든 것은 반드시 해킹일 뿐입니다.