【发布时间】:2016-07-20 10:22:18
【问题描述】:
这篇文章是对我之前提出的问题here的修正。
假设我有以下示例文件:
cat sample2.txt
HOST dev@opulex.com
PORT 1066
DATABASE ORACLE_1
SCHEMA DEPT.*;
SCHEMA EMP.*;
DATABASE ORACLE_2
SCHEMA JOB.*;
SCHEMA SALARY.*;
HOST orl@opulex.com
PORT 89
DATABASE MYSQL_1
SCHEMA PURCHASE.*;
DATABASE MYSQL_2
SCHEMA PRICE.*;
SCHEMA PRODUCT.*;
对于上述文件中的内容,我想只打印 HOST/PORT/DATABASE/SCHEMA 旁边的列,同时假设每行的最后一列以分号结尾,我想替换缺失的列值与前一行的列值。
@anubhava 帮助我在previous post 中实现了接近它的目标:
cat sample2.txt | awk 'tolower($0)~/^host|^port|^database|^schema/{printf "%s",$2 OFS;}' | awk -v RS=';' -v ORS=';\n' 'NF' | awk 'NF==1{print c1, c2, c3, $1; next} NF==2{print c1, c2, $1, $2; next} {c1=$1; c2=$2; c3=$3} 1' | sed 's|^[[:blank:]]*||g; s|\;$||g'
dev@opulex.com 1066 ORACLE_1 DEPT.*
dev@opulex.com 1066 ORACLE_1 EMP.*
dev@opulex.com 1066 ORACLE_2 JOB.*
dev@opulex.com 1066 ORACLE_1 SALARY.*
orl@opulex.com 89 MYSQL_1 PURCHASE.*
orl@opulex.com 89 MYSQL_2 PRICE.*
orl@opulex.com 89 MYSQL_1 PRODUCT.*
但我希望它如下所示
dev@opulex.com 1066 ORACLE_1 DEPT.*
dev@opulex.com 1066 ORACLE_1 EMP.*
dev@opulex.com 1066 ORACLE_2 JOB.*
dev@opulex.com 1066 ORACLE_2 SALARY.*
orl@opulex.com 89 MYSQL_1 PURCHASE.*
orl@opulex.com 89 MYSQL_2 PRICE.*
orl@opulex.com 89 MYSQL_2 PRODUCT.*
谢谢
【问题讨论】: