linux - 带有 $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
。
解决方案
请您尝试以下操作。
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:
推荐阅读
- c++ - 给定代码是否有任何更改,因此我可以为问题提供正确的输出
- javascript - Javascript实践测试题:匿名函数
- amazon-web-services - 尝试使用信用卡付款时出现 AWS Workspaces 问题
- groovy - 如何逐行读取文本文件在jmeter中使用groovy脚本引擎定义计数函数
- python-3.x - 寻找平均蟒蛇的技术
- dask - 有没有办法使用 dask 在镶木地板文件上运行 SQL 语句?
- python - Django:无法分配“<Booking:loader2>”:“Booking.b_price”必须是“Loader_post”实例
- amp-html - 如何最初激活 amp-story-player 中的任何网络故事
- firebase - 如何在 Flutter 中的某些布尔条件下启用按钮?
- python - Django:OperationalError 没有这样的列