내 파일:
EventTime=20180726001317
ObjectOfReference=TCU_XXX202
SPtext=Heartbeat Failure
EAName=TCU_XXX202
EventTime=20180726001317
ObjectOfReference=TCU_XXX203
SPtext=Heartbeat Failure
EAName=TCU_XXX203
예상 출력:
EventTime;ObjectOfReference;SPtext;EAName
20180726001317;TCU_XXX202;Heartbeat Failure;TCU_XXX202
20180726001317;TCU_XXX203;Heartbeat Failure;TCU_XXX203
awk 스크립트를 사용해 보았지만 작동하지 않습니다.
awk -F\"= :\" '!/%a/&&/-EventTime|EAName|-ObjectOfReference|-SPtext|%A/{if(\$1 != \"%A\")printf \$NF\",\";else print \"\\n\"}'
답변1
GNU 사용 awk
:
awk -F= '{a=(FNR!=NR)+1;printf "%s"(NR%4==0?RS:";"),$a} a==1&&NR>=4{nextfile}' file file
그러나 헤더 행이 필요하지 않은 경우 다음과 같이 작업을 수행할 수 있습니다( mawk
또한 작동합니다).
awk -F= '{printf "%s"(NR%4==0?RS:";"),$2}' file
설명하다:
-F=
필드 구분 기호를 로 설정합니다=
.a=(FNR!=NR)+1
: 첫 번째 파일과 두 번째 파일에$a
설정됩니다 .1
2
printf "%s"(NR%4==0?RS:";"),$a
: 문자열을 인쇄하고, 네 번째 줄이면 줄 구분 기호를 인쇄하고RS
, 그렇지 않으면 필드 구분 기호를 인쇄합니다.;
a==1&&NR>=4
: 첫 번째 파일에서 4줄을 처리한다면...nextfile
...다음 파일 처리 시작(GNU에만 해당)
산출:
EventTime;ObjectOfReference;SPtext;EAName
20180726001317;TCU_XXX202;Heartbeat Failure;TCU_XXX202
20180726001317;TCU_XXX203;Heartbeat Failure;TCU_XXX203