++++++++++ 输入:
EMPNO 16: (DEP,GROUP) DEPTNO:10, GROUP:36 , AREA-CA LOGIN TIM: loginday=10 min 30 sec loginrec=1 min 30 sec 1: working for 'advanced automation'
EMPNO 17: (DEP,GROUP) DEPTNO:4, GROUP:1010 , AREA-CA LOGIN TIM: loginday=9 min 30 sec loginrec=2 sec 2: working for 'vacation'
需要输出:
EMP DEPT LOGIN REC WORKING FOR
=== ==== ========= ===========
EMPNO 16: DEPTNO:10, GROUP:36 1 min 30 sec 1 advanced automation
EMPNO 17: DEPTNO:4, GROUP:1010 2 sec vacation
++++++++++
如何在单个命令行中仅使用awk获得输出。
基本上,您可以看到我想对输入应用一些规则(我通过在正在处理的大文件中应用awk来获得这些规则):
我通过处理一个大文件得到了输入,下面是上一步:
EMPNO 16:
(DEP,GROUP) DEPTNO:10, GROUP:36 , AREA-CA
LOGIN TIM: loginday=10 min 30 sec loginrec=1 min 30 sec
working for 'advanced automation'
答案 0 :(得分:2)
请您尝试以下操作(完全基于显示的示例,并且没有按照OP在预期输出中留出适当的空格)
awk '
BEGIN{
print "EMP DEPT LOGIN REC WORKING FOR"
}
match($0,/^EMPNO [0-9]+:/){
EMP=substr($0,RSTART,RLENGTH)
}
match($0,/DEPTNO:[0-9]+\, GROUP:[0-9]+/){
DEPT=substr($0,RSTART,RLENGTH)
}
match($0,/loginrec.*sec/){
LOGIN=substr($0,RSTART+9,RLENGTH-9)
}
match($0,/working for \047.*/){
WORKING=substr($0,RSTART+13,RLENGTH-14)
}
{
print EMP,DEPT,LOGIN,WORKING
EMP=DEPT=LOGIN=WORKING=""
}' Input_file
答案 1 :(得分:2)
$ cat tst.awk
BEGIN {
OFS="\t"
print "EMP", "DEPT", "LOGIN REC", "WORKING FOR"
print "===", "====", "=========", "==========="
}
{
match($0,/loginrec=/)
loginRec = workingFor = substr($0,RSTART+9)
sub(/:.*/,"",loginRec)
gsub(/^[^\047]*\047|\047[^\047]*$/,"",workingFor)
print $1" "$2, $4" "$5, loginRec, workingFor
}
$ awk -f tst.awk file
EMP DEPT LOGIN REC WORKING FOR
=== ==== ========= ===========
EMPNO 16: DEPTNO:10, GROUP:36 1 min 30 sec 1 advanced automation
EMPNO 17: DEPTNO:4, GROUP:1010 2 sec 2 vacation
$ awk -f tst.awk file | column -s$'\t' -t
EMP DEPT LOGIN REC WORKING FOR
=== ==== ========= ===========
EMPNO 16: DEPTNO:10, GROUP:36 1 min 30 sec 1 advanced automation
EMPNO 17: DEPTNO:4, GROUP:1010 2 sec 2 vacation