텍스트 파일의 필드를 구문 분석하고 다른 파일에 쓰는 방법

텍스트 파일의 필드를 구문 분석하고 다른 파일에 쓰는 방법

데이터베이스 명령을 실행하고 결과의 출력 파일을 생성했습니다. 각 필드 이름은 dbt_xxxxxx 등호 뒤의 값인 각 필드 값으로 시작됩니다. 파일을 구문 분석하고 열에 필드 이름이 있고 다른 열에 값이 있는 새 파일을 작성하고 파일의 헤더를 만드는 방법

dbt_dbid=4   dbt_stat=0x0 (0x0000)
dbt_extstat=0x0 (0x0000)
dbt_stat2=0x0 (0x0000)
dbt_stat3=0x20000 (0x00020000 (DBT3_SYSPARTITIONS_EXISTS))
dbt_stat4=0x0 (0x00000000)
dbt_runstat=0x0(0x0000)
dbt_state=0x2(0x0002 (DBST_ACTIVE))   dbt_keep=0  dbt_hdeskeep=0
dbt_next=0x000000002197DE80   dbt_systask_keep=0 dbt_detachxact_keep 0
    dbt_dcompver_default=1
dbt_lock=0  dbt_dbaid=1
dbt_verstimestamp= May 15 2012  3:37PM   dbt_dbname=TestDB
dbt_logrows=0
dbt_lastlogbp=0x0000000000000000
dbt_logsema=000000000099EE10 
dbt_nextseq=11  dbt_oldseq=11
dbt_dbinfobuf.dbi_logvers=7
dbt_dbinfobuf.dbi_upgdvers=35 ... .dbi_upgd_minor=1720
dbt_dbinfobuf.dbi_dbinfovers=5
dbt_dbinfobuf.dbi_sarg_vers=2  dbt_threshstat=0x0
dbt_thresholds=0x00000000219873B8  dbt_thresh_spin=0x000000002011E300
dbt_maxthresh=256
thc_segment   2 thc_level   664 thc_status 0xf  <-- last chance threshold
dbt_nextid=560001995 dbt_nextidstat=0x0
dbt_dflinfo=0x0000000000000000  dbt_dflstat=0x0
dbt_dumpthreadlock=0
dbt_dbts=0x0000 0x00001492   dbt_xdesqueue   next=0x0000000021986C20

답변1

이것이 내가 생각해낸 것입니다:

echo -e "Name\tValue" \
    | cat input.txt - \
    | sed -e 's/dbt_/\ndbt_/g;s/=/\t/g' \
          -e 's/^[[:space:]]//;s/[[:space:]]$//;/^$/d'

이제 "thc_segment" 행은 그대로 두고 마지막 행이 생성됩니다 dbt_xdesqueue next 0x0000000021986C20. 다른 것을 원한다면 지정해야 합니다.

답변2

{
  printf "%s\t%s\n" Name Value
  grep -Po 'dbt_.+?=.*?(?=dbt_|$)' input_file | tr = '\t'
} > output_file

관련 정보