データベースコマンドを実行し、結果の出力ファイルを生成しました。各フィールド名は、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