首页 > 解决方案 > 带有 $0 的 AWK 使用 sed 用新字符串替换模式

问题描述

我有一个包含多个作业内容的文件,例如:

insert_job: 18132_TAL_D_DS_PEAR_AUTORECON   job_type: CMD 
command: $ADM_BIN/pear_generic_wrapper.ksh 
owner: gpadmin
permission: 

在这里,我需要为每个 insert_job 添加一行:

insert_job: 18132_TAL_D_DS_PEAR_AUTORECON   job_type: CMD 
condition: 18132_D_DS_PEAR_AUTORECON  

所以,基本上 2 个步骤(首先复制行作业名称;然后替换18132_TAL_18132_打印为条件的第二行复制行:)

为此,我对每个 insert_job 行都进行到这一点:

insert_job: 18132_TAL_D_DS_PEAR_AUTORECON   job_type: CMD 
insert_job: 18132_TAL_D_DS_PEAR_AUTORECON 

现在,要更新第二行以将 insert_job 替换为 condition 和18132_TAL_18132_我被卡住了。

我正在尝试编写如下代码:

$ cat input.dat | awk '($0!~"job_type") {print $0|sed "s/insert_job/condition/"} 1' 

但是,sed 在这里不起作用,它会给出语法错误。

您能否帮助使用 sed after 的正确语法print $0

标签: linuxawksed

解决方案


请您尝试以下操作。

awk '
/insert_job/{
  val=$2
  sub(/_[^_]*/,"",val)
  $0=$0 ORS "condition: " val
  val=""
}
1
' Input_file

说明:为上述代码添加说明。

awk '                            ##Starting awk code from here.
/insert_job/{                    ##Checking condition if string insert_job is found in a line then do following.
  val=$2                         ##Creating variable val whose value is $2(2nd field) of current line.
  sub(/_[^_]*/,"",val)           ##Substituting _ till next occurrence of _ with NULL in val here.
  $0=$0 ORS "condition: " val    ##Concatenating ORS(new line) then string condition and variable val here.
  val=""                         ##Nullifying variable val here.
}
1                                ##1 will print edited/non-edited line here.
'  Input_file                    ##Mentioning Input_file name here.

输出如下:

insert_job: 18132_TAL_D_DS_PEAR_AUTORECON   job_type: CMD 
condition: 18132_D_DS_PEAR_AUTORECON
command: /pear_generic_wrapper.ksh 
owner: gpadmin
permission: 

推荐阅读