AWK | 동적 행에서 열로의 변환

AWK | 동적 행에서 열로의 변환

내 파일:

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설정됩니다 .12
  • 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

관련 정보