我有一个示例文件如下:
cat sample.txt
HOST dev@opulex.com
PORT 1066
DATABASE ORACLE_1
SCHEMA DEPT.*;
SCHEMA EMP.*;
DATABASE ORACLE_2
SCHEMA JOB.*;
对于上面示例文件中的内容,我想只打印HOST / PORT / DATABASE / SCHEMA旁边的列。所以,我可以实现如下:
cat sample.txt | awk 'tolower($0)~/^host|^port|^database|^schema/{printf "%s",$2 OFS;}' | awk -v RS=';' -v ORS=';\n' 'NF'
dev@opulex.com 1066 ORACLE_1 DEPT.*;
EMP.*;
ORACLE_2 JOB.*;
假设每条记录中的最后一列以分号(;)
结尾,我如何使用AWK将NULL列值替换为上一行的列值,如下所示:
dev@opulex.com 1066 ORACLE_1 DEPT.*;
dev@opulex.com 1066 ORACLE_1 EMP.*;
dev@opulex.com 1066 ORACLE_2 JOB.*;
先谢谢。!
答案 0 :(得分:2)
如果您有这些数据:
cat file
dev@opulex.com 1066 ORACLE_1 DEPT.*;
EMP.*;
ORACLE_2 JOB.*;
使用awk你可以这样做:
awk 'NF==1{print c1, c2, c3, $1; next}
NF==2{print c1, c2, $1, $2; next}
{c1=$1; c2=$2; c3=$3} 1' file
<强>输出:强>
dev@opulex.com 1066 ORACLE_1 DEPT.*;
dev@opulex.com 1066 ORACLE_1 EMP.*;
dev@opulex.com 1066 ORACLE_2 JOB.*;
答案 1 :(得分:0)
另一个awk
替代
$ rev file |
awk 'NF>1{c2=$2?$2:c2; c3=$3?$3:c3; c4=$4?$4:c4}
{print $1,c2,c3,c4}' |
rev
dev@opulex.com 1066 ORACLE_1 DEPT.*;
dev@opulex.com 1066 ORACLE_1 EMP.*;
dev@opulex.com 1066 ORACLE_2 JOB.*;