如何处理带有块的字符串(awk)

时间:2017-07-07 03:15:12

标签: awk

每个块以' COL ID'开头。在输入数据中。 我需要打印' COL ID'和JOB_subid如果有。正如您在输入数据中看到的那样,' COLID = 2'有一个job_subid(1 /表名左边)但是' COLID = 3'或者' COLID = 4'没有。 对于COLID = 3/4,我想打印'no_data'因为它没有任何job_subid。 我该如何处理这些数据?

AWK

''

输入数据

if($_POST['input'] != ' ' && !empty($_POST['input'])){run query}

结果不正确

/COL ID/        {JOBID=$4;}

/^[0-9]/ {
    JOB_SUBID=$1;
    printf "%s#%s",JOBID,JOB_SUBID;
    printf "\n";
} 

END {

if (JOB_SUBID="") then
  JOB_SUBID="no_data";
  printf "%s#%s",JOBID,JOB_SUBID;
  printf "\n";
end if;

}   

必填结果

COL ID    : 2
PID       : 26788


ID     TABLE                         
------ ------------------------------
1      "SCOTT"."PRINCE01"            


COL ID    : 3
PID       : 26788


COL ID    : 4
PID       : 26788

4 个答案:

答案 0 :(得分:1)

您可以通过

执行此操作
%{shares: [%Cs{name: "Junaid2"}, %Cs{name: "Junaid1"}]}

简要说明,

  • 将记录分隔符设置为$ awk -v RS='COL ID' 'NR>1{print $2"#"($10==""?"no data":$10)}' file 2#1 3#no data 4#no data
  • COL ID:省略第一条记录
  • 检查是否存在NR>1子ID,如果没有则打印“无数据”。

答案 1 :(得分:1)

如果您想保持与列出的相同的样式,则只需添加此声明。

/^[^0-9]/ {JOB_SUBID = ""} 并摆脱END

答案 2 :(得分:1)

awk 解决方案:

scripts: {
  "myScript": "concurrently \"npm run myScript1\" \"npm run myScript2\"",
  "myScript1": "cross-env NODE_ENV=development webpack-dev-server",
  "myScript2": "nodemon ./server.js",
}

输出:

awk '/COL ID/{ 
        if(colid) { sid=(subid)? subid:"no_data"; print colid"#"sid; subid="" } colid=$4 
     }
     /^[0-9]+/{ subid=$1 }END{ if(colid) print colid"#"sid }' inputfile

答案 3 :(得分:0)

$ cat tst.awk
/COL ID/ { prt(); jobId = $NF }
/^[0-9]/ { subId = $1 }
END { prt() }
function prt() { if (NR>1) print jobId "#" subId; subId="no_data" }

$ awk -f tst.awk file
2#1
3#no_data
4#no_data